在使用的XDocument两个XML文档合并问题

问题描述 投票:1回答:1

现有的XML文件(的test.xml)内容为下

<manifest xmlns:imsmd="http://ltsc.ieee.org/xsd/LOM">
<resources>
<resource>
<file href="default.xml">
<metadata>
<imsmd:lom />
</metadata>
</file>
</resource>
</resources>
</manifest>

我需要的是使最终输出类似于添加新节点:

<manifest xmlns:imsmd="http://ltsc.ieee.org/xsd/LOM">
<resources>
<resource>
<file href="default.xml">
<metadata>
<imsmd:lom />
</metadata>
</file>

<file href="testimg.png">
<metadata>
<imsmd:lom />
</metadata>
</file>
</resource>
</resources>
</manifest>

我尝试到目前为止(虽然不完全正确的是下)

XNamespace ns = @"http://ltsc.ieee.org/xsd/LOM";
            XNamespace lomns = ":lom";


            var doc = XDocument.Load(@"D:\test.xml");

            var result = new XDocument(
                new XElement(ns + "manifest",                   
                    new XElement("file", new XAttribute("href", "testimg.png"),
                    new XElement("metadata", new XElement(lomns + "imsmd"))

                     )
                 )
             );

            //merge
            doc.Root.Add(result.Root.Elements());

其输出

<manifest xmlns:imsmd="http://ltsc.ieee.org/xsd/LOM">
  <resources>
    <resource>
      <file href="default.xml">
        <metadata>
          <imsmd:lom />
        </metadata>
      </file>
    </resource>
  </resources>
  <file href="testimg.png">
    <metadata>
      <imsmd xmlns=":lom" />
    </metadata>
  </file>
</manifest>
c# xml linq-to-xml
1个回答
1
投票

代码添加新元素到根,但按您所需的输出你提到一个新的元素(file)应resource

找到元素resourcexml然后添加元素。

 doc.Descendants("resource")
    .ElementAt(0)
    .Add(new XElement("file", new XAttribute("href", "testimg.png"),
         new XElement("metadata", new XElement(doc.Root.GetNamespaceOfPrefix("imsmd")+ "lom"))));

输出:

 <manifest xmlns:imsmd="http://ltsc.ieee.org/xsd/LOM">
  <resources>
    <resource>
      <file href="default.xml">
        <metadata>
          <imsmd:lom />
        </metadata>
      </file>
      <file href="testimg.png">
        <metadata>
          <imsmd:lom />
        </metadata>
      </file>
    </resource>
  </resources>
</manifest>

勾选此Demo

© www.soinside.com 2019 - 2024. All rights reserved.