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

C# 创建xml文档时的默认命名空间,c#,xml,C#,Xml,是否可以使用XmlDocument.CreateElement()和XmlNode.AppendChild()创建子级,而不指定名称空间,并使用“默认”名称空间 当前,如果我创建了一个具有名称空间的根节点,并且没有在每个子节点上指定名称空间,那么输出xml将定义一个空白名称空间 下面是如果我没有为我创建的每个元素指定名称空间将生成的内容。是否有一个快捷方式,我不必每次都指定名称空间 <root xmlns="http://example.com"> <child1 xmln

是否可以使用XmlDocument.CreateElement()和XmlNode.AppendChild()创建子级,而不指定名称空间,并使用“默认”名称空间

当前,如果我创建了一个具有名称空间的根节点,并且没有在每个子节点上指定名称空间,那么输出xml将定义一个空白名称空间

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

<root xmlns="http://example.com">
  <child1 xmlns="">
    <child2 />
  </child1>
</root>

如果您已经创建了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");
然后您将获得以下输出文件:

<root xmlns="http://www.example.com">
  <child1>
    <child2 />
  </child1>
</root>

节点上的名称空间沿层次结构向下继承,除非子元素明确定义了其他内容

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


我不知道有什么方法来指定一个默认的命名空间,每当你创建一个新的元素时,如果你指定一个元素,元素将使用那个命名空间——如果你不指定一个,那就是空白命名空间。< /P> < P>如果你使用.NET 3.5,我建议使用LINQtoXML,(System .x.LINQ)。使用XDocument、XElement和XAttribute类


但是marc_的回答是正确的,名称空间是继承的。

Erm,marc_的回答没有说名称空间是继承的。它说您必须为创建的每个XML元素手动指定它。
<root xmlns="http://www.example.com">
  <child1>
    <child2 />
  </child1>
</root>