将不需要的命名空间属性添加到根子元素

时间:2012-11-15 16:09:40

标签: c# xml xml-namespaces linq-to-xml

我已经尝试过将默认命名空间添加到根目录,但它也将命名空间添加到它的子节点。我想将命名空间添加到现有的XDocument。

我的代码尝试;

// add default namespace - attempt 1
XNamespace xmlns = "http://www.myschema/schema.xsd";
xDocument.Root.Name = xmlns + xDocument.Root.Name.LocalName;

// add default namespace - attempt 2
XNamespace MyNS = "http://www.myschema/schema.xsd";
xDocument.Element("testFile").Name = MyNS.GetName("testFile");

XML;

<testFile version="1" xmlns="http://www.myschema/schema.xsd">
  <testResults xmlns="">  <!-- *** Unwanted Attribute *** -->
    <result resultID="abcdefgh" comment="blah blah blah blah">
  </testResults>
</testFile>

我想知道为什么testResults附加了xmlns名称空间属性?

这是一些要测试的测试C#代码;

XDocument xDocument = new XDocument(
    new XElement("testFile",
        new XAttribute("version", "1"),
        new XElement("testResults",
            new XElement("result",
                new XAttribute("resultID", "abcdefgh"),
                new XAttribute("comment", "blah blah blah blah")
        ))));

3 个答案:

答案 0 :(得分:3)

XNamespace ns = "http://www.myschema/schema.xsd";
XDocument xDocument = new XDocument(
new XElement(ns + "testFile",
    new XAttribute("version", "1"),
    new XElement(ns + "testResults",
        new XElement(ns + "result",
            new XAttribute("resultID", "abcdefgh"),
            new XAttribute("comment", "blah blah blah blah")
    ))));

答案 1 :(得分:1)

以下代码:

var xDocument = new XmlDocument();
var element1 = xDocument.CreateElement("testFile", "http://www.myschema/schema.xsd");
element1.SetAttribute("version", "1");
xDocument.AppendChild(element1);

var element2 = xDocument.CreateElement("testResults", "http://www.myschema/schema.xsd");
element1.AppendChild(element2);

var element3 = xDocument.CreateElement("result", "http://www.myschema/schema.xsd");
element3.SetAttribute("resultID", "abcdefgh");
element3.SetAttribute("comment", "blah blah blah blah");
element2.AppendChild(element3);

生成以下xml文件:

<testFile version="1" xmlns="http://www.myschema/schema.xsd">
  <testResults>
    <result resultID="abcdefgh" comment="blah blah blah blah" /> 
  </testResults>
</testFile>

答案 2 :(得分:1)

您无法“向XDocument添加命名空间”。文档没有名称空间。元素和属性名称具有名称空间。

您必须更改文档中每个元素的命名空间,以及可能还有一些属性。