【发布时间】:2015-06-22 08:47:31
【问题描述】:
我有使用 XPath 过滤的 Xml(类似于此的查询):
XmlNodeList allItems =
xDoc.SelectNodes("//Person[not(PersonID = following::Person/PersonID)]");
这会过滤我原始 Persons Xml 中的所有重复项。我想从上面生成的 XmlNodeList 创建一个新的 XmlDocument 实例。目前,我能看到的唯一方法是遍历 XmlNode 的列表并构建一个 Xml 字符串(这样):
XmlNodeList allItems = xDoc.SelectNodes("//Person[not(PersonID = following::Person/PersonID)]");
StringBuilder xml = new StringBuilder("<Persons>");
foreach (XmlNode node in allItems)
xml.Append(node.OuterXml);
xml.Append("</Persons>");
XmlDocument newXDoc = new XmlDocument();
newXDoc.LoadXml(xml.ToString());
必须有更有效的方法来做到这一点?
【问题讨论】:
-
出于兴趣,你必须使用XPath吗?你必须使用XmlDocument吗? LINQ to XML 使这类事情(实际上几乎所有事情......)变得更简单。
-
我并不珍视它被加载到 XmlDocument 中。实际上,我使用它的输出来填充 DataTable。所以我真正感兴趣的是字符串 XML。我确实将 foreach 转换为 Linq,但它的执行速度似乎和上面的 foreach 一样慢:-|
标签: c# xml xpath xmldocument xmlnodelist