c# - 复制一个节点并将其保存为一个新的 xml 文件 c#

标签 c# xml

我是新手,这是我关于 stackoverflow 的第一个问题,请多多包涵。

我有以下 xml 文件

<?xml version="1.0" encoding="utf-8"?>
<items>
 <superitem>
  <item id="10" name="Ten"
        description="This is number ten">
    <attribute name="weight" value="1" />
    <attribute name="capacity" value="80" />
  </item>
  <item id="20" name="Twenty"
        description="This is might be number twenty">
    <attribute name="weight" value="1" />
    <attribute name="opaque" value="11" />
    <uncertain>
      <uncertainity name="might" level="Eighty Twenty."/>
    </uncertain>
  </item>
 </superitem>
</items>

在代码中我试图复制 id = 20 的节点

newItem.SelectSingleNode("/items/superitem/item[@id='20']")

并将该唯一节点保存到另一个 xml 文件。所以我正在尝试获取这样的 xml

<?xml version="1.0" encoding="utf-8"?>
<items>
 <superitem>
  <item id="20" name="Twenty"
        description="This is might be number twenty">
    <attribute name="weight" value="1" />
    <attribute name="opaque" value="11" />
    <uncertain>
      <uncertainity name="might" level="Eighty Twenty."/>
    </uncertain>
  </item>
 </superitem>
</items>

我尝试在该 xml 的最后一个子节点之后将节点导入 xml 文件,我可以做到。如果我需要只使用该节点创建一个新的 xml 文件怎么办?输出 xml 与我上面提到的完全一样??

最佳答案

使用 XElement (XLinq) 更容易。

XElement oldDoc = XElement.Load(filename1);

//XElement items = oldDoc.XPathSelectElements("/items/superitem/item[@id='20']");
//XElement newDoc = new XElelement("items", new XElement("superitem", items));

// Because of using an XElement as toplevel (and not XDocumet), 
// the XPath has to start lower. And a Singular result is more to the point.
var item = doc.XPathSelectElement("//superitem/item[@id='20']");
XElement newDoc = new XElelement("items", new XElement("superitem", item));

newDoc.Save(fileName2);

关于c# - 复制一个节点并将其保存为一个新的 xml 文件 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18651320/

相关文章:

ios - 无法在iOS中使用NSXMLParser解析XML文件

c# - EF Code First 阻止使用 Fluent API 进行属性映射

c# - 我应该在具有固定类型大小的语言(如 Java、C#)中的 64 位上使用 'long' 而不是 'int'

c# - 类库中文件的路径

c# - 如何从 dataReader 列中读取 Xml 值

xml - 将元素添加到节点(如果不存在)

c# - WPF MVVM 从 icommand 执行更改父窗口 View 模型

c# - 当我将表名作为字符串时,如何创建 LINQ-to-SQL 语句?

使用 Xerces 的 getElementsByTagName 的 Java 代码不返回子节点

Java Jax rs 以 xml 形式返回列表