【问题标题】:XML string - select only certain nodesXML 字符串 - 仅选择某些节点
【发布时间】:2012-06-19 22:18:01
【问题描述】:

我尝试在此处查找此内容,但找不到正确的答案。我有一个包含一堆节点的 XML 字符串。
我想从这个字符串中只提取几个节点,并附加一个新的根元素并返回它。

我知道如何通过将其加载到 XMLDocument 并选择节点来做到这一点。使用 XpathNavigator 或 XmlReader 是否有更好的方法?

这是我的字符串

<root>
  <node1/>
  <node2/>
  <node3/>
  <node4/>
  <node5>
</root>

我希望我的输出字符串是

<root>
   <node3/>
   <node4/>
 </root>

必须以有效的方式完成。

【问题讨论】:

  • 所以要删除节点 1、3 和 5?
  • 是的,但实际上我可能需要删除更多节点。我想我的意思是,总共可能有超过 5 个节点,而我只需要 2 个。我的输入也是一个字符串(我知道我在帖子中提到了这一点,只是强调一下)

标签: xml xmlreader xpathnavigator


【解决方案1】:

为了简单起见,我会使用XDocument.Parse()。并通过提供的函数操作 DOM。由于 XML 是作为字符串提供的,可能很小,我敢打赌您不会看到复杂性问题。

如果要删除很多节点,我建议您使用 XPath 字符串列表。然后对于每个字符串,您可以使用doc.XPathSelectElements() 查找所有元素并在每个元素上调用remove()。生成的 XDocument 将只有剩余的节点。

【讨论】:

  • 感谢您的回答。然而,即使我得到了 XDocument 部分,我会使用什么方法来实现我想要的?
  • 这是我尝试过的,但它会删除除根 XDocument x = XDocument.Parse(xmlstring); 之外的所有内容x.Root.Elements().Where(e => e.Name != "node3" || e.Name != "node4").Remove();
  • 我可以在这里问更多问题还是我必须打开另一个论坛。 (我想在的基础上给添加属性)
  • 您应该打开另一个问题以获得详细的帮助。但总体思路是选择两个元素,然后在 node3 上调用 setAttributeValue()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-30
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多