将节点添加到现有xml时,请删除xmlns属性

时间:2015-09-21 08:31:14

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

我有一个XML文件:

<ns2:root xmlns:ns2="namespace">
    <ns2:a>
        <ns2:b>some content</b>
        <ns2:c>some content</c>
        <ns2:d>some content</d>
    </a>
</root>

我需要在特定的地方添加一个新节点,我的代码是:

var doc = XDocument.Load(file);
XNamespace ns2 = "namespace";
doc.Element(ns2 + "root").Element(ns2 + "a").Element(ns2 + "c").AddAfterSelf(
    new XElement(ns2+"new", 
        new XElement("new1", 
            new XElement("new2","some content"),
            new XElement("new3", "some content"))));

输出结果为:

<ns2:root xmlns:ns2="namespace">
    <ns2:a>
        <ns2:b>some content</b>
        <ns2:c>some content</c>
        <ns2:new>
            <new1 xmlns="">
                <new2>some content</new2>
                <new3>some content</new3>
            </new1>
        </new>
        <ns2:d>some content</d>
    </a>
</root>

所需的输出是:

<ns2:root xmlns:ns2="namespace">
    <ns2:a>
        <ns2:b>some content</b>
        <ns2:c>some content</c>
        <ns2:new>
            <new1>
                <new2>some content</new2>
                <new3>some content</new3>
            </new1>
        </new>
        <ns2:d>some content</d>
    </a>
</root>

如何避免将xmlns atrribute添加到节点new1?

在所需输出中编辑错误。

1 个答案:

答案 0 :(得分:0)

添加&#34; ns2 +&#34;在每个需要在sitemap命名空间中的元素名称之前

var doc = XDocument.Load(file);
XNamespace ns2 = "namespace";
doc.Element(ns2 + "root").Element(ns2 + "a").Element(ns2 + "c").AddAfterSelf(
    new XElement(ns2+"new", 
        new XElement(ns2+"new1", 
            new XElement(ns2+"new2","some content"),
            new XElement(ns2+"new3", "some content"))));