【发布时间】:2018-08-29 01:19:17
【问题描述】:
我有一个项目,我目前正在实现对通过文档键中的任意/用户定义路径从 XML 文件读取值的支持。
例如,如果文档如下所示:
<information>
<machine>
<foo></foo>
<name>
test machine
</name>
<bar>spam</bar>
</machine>
</information>
那么用户可能想要从information/machine 中的name 键中检索值。
有没有一种方法可以使用XDocument/XPath 来查找用户想要的值,而无需知道/在文档架构中进行编码?
我最初的想法是通过使用XElement 项目的递归函数形式来处理文档,但我觉得应该有一个更简单/更清洁的解决方案,不需要我滚动自己的查找代码。
我也尝试过类似的方法
var doc = XDocument.Load("C:\Path\to\XML\file.xml");
// Split the parent keys string
XElement elem = doc.Root.XPathSelectElement("path/to/key");
if (elem != null && elem.Attribute("wantedKeyName") != null)
replace = elem.Attribute("wantedKeyName").Value;
但elem 始终为空。我假设我定义路径或使用 XPathSelectElement 的方式存在问题,但我还没有解决。
【问题讨论】:
-
XDocument doc = XDocument.Load("YOURXML.xml"); var q = from elements in doc.Elements("information").Elements("machine") 选择元素; foreach (var item in q) { string str = item.Element("name").Value;}
-
@ershoaib 如果我事先知道 XML 文件的架构,我会这样做,但程序必须能够处理任何 XML 文件和其中的任何路径,而不知道内容.
-
如果您不知道文件的内容,如何使用 XPathSelectElement("path/to/key") ?在这种情况下,您不知道路径
-
@RPiAwesomeness 可能您的实际 XML 包含默认命名空间(名为
xmlns的“属性”,如xmlns="some-namespace-uri-here")。如果是这种情况,请参阅:Use XPath with XML namespace -
使用后代:List
elements = doc.Descendants("name").ToList();
标签: c# xml xpath linq-to-xml