创建xml文档时的默认命名空间

Sig*_*ray 3 c# xml

是否可以使用XmlDocument.CreateElement()和XmlNode.AppendChild()创建子项而不指定命名空间并让它使用"默认"命名空间?

目前,如果我使用命名空间创建根节点并且未在每个子节点上指定命名空间,则输出xml将定义空命名空间.

如果我没有为我创建的每个元素指定命名空间,下面是生成的内容.是否有一个快捷方式,我不必每次都指定命名空间?

<root xmlns="http://example.com">
  <child1 xmlns="">
    <child2 />
  </child1>
</root>
Run Code Online (Sandbox Code Playgroud)

码:

XmlDocument doc = new XmlDocument();
var rootNode = doc.CreateElement("root", "http://example.com");
doc.AppendChild(rootNode);
var child1Node = doc.CreateElement("child1");
rootNode.AppendChild(child1Node);
var child2Node = doc.CreateElement("child2");
child1Node.AppendChild(child2Node);
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 8

如果您已创建XML文档,并为层次结构中的每个元素指定了相同的命名空间 - 如下所示:

        XmlDocument doc = new XmlDocument();

        const string xmlNS = "http://www.example.com";

        XmlElement root = doc.CreateElement("root", xmlNS);
        doc.AppendChild(root);

        XmlElement child1 = doc.CreateElement("child1", xmlNS);
        root.AppendChild(child1);

        child1.AppendChild(doc.CreateElement("child2", xmlNS));

        doc.Save(@"D:\test.xml");
Run Code Online (Sandbox Code Playgroud)

然后你会得到这个输出文件:

<root xmlns="http://www.example.com">
  <child1>
    <child2 />
  </child1>
</root>
Run Code Online (Sandbox Code Playgroud)

<root>除非子元素明确定义其他内容,否则节点上的命名空间将继承在层次结构中.

如果您使用创建新的XmlElement doc.CreateElement并且未指定XML命名空间,那么当然,该新元素将具有空白命名空间,因此将序列化到您拥有的XML文档中.

我不知道在创建新元素时指定要使用的默认命名空间的任何方法 - 如果指定一个,该元素将使用该命名空间 - 如果您没有指定一个,则它是空命名空间.