.net - XPath 和选择单个节点

标签 .net xpath

我在 .NET 中使用 XPath 来解析 XML 文档,如下所示:

XmlNodeList lotsOStuff = doc.SelectNodes("//stuff");

foreach (XmlNode stuff in lotsOStuff) {
   XmlNode stuffChild = stuff.SelectSingleNode("//stuffChild");
   // ... etc
}

问题在于 stuffChild 的 XPath 查询总是返回第一个 stuff 的 child 元素,从不休息。 XPath 不能用于查询个人 XMLElement ?

最佳答案

// XPath 表达式的开头从文档根开始。试试“.//stuffChild”。 .是 self::node() 的简写,它将设置搜索的上下文,//是后代轴的简写。

所以你有了:

XmlNode stuffChild = stuff.SelectSingleNode(".//stuffChild");

这意味着:

xmlNode stuffChild = stuff.SelectSingleNode("self::node()/descendant::stuffChild");
xmlNode stuffChild = stuff.SelectSingleNode("self::node()/descendant-or-self::stuffChild");

在子节点可能与父节点同名的情况下,您可能希望使用后面稍微详细一点的语法,以确保您不会重新选择父节点:
xmlNode stuffChild = stuff.SelectSingleNode("self::node()/descendant::stuffChild");

另请注意,如果“stuffChild”是“stuff”的直接后代,则可以完全省略前缀,只需选择“stuffChild”即可。
XmlNode stuffChild = stuff.SelectSingleNode("stuffChild");

W3Schools教程以易于理解的格式提供有用的信息。

关于.net - XPath 和选择单个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26800/

相关文章:

c# - 使用 MongoDB C# 驱动程序将项目添加到嵌套对象的嵌套数组

python scrapy - 从 <table> 中提取数据 - 没有 id 标签

xpath - XPath中是否存在“位置不同”的问题

java - 如何使用 xpath 获取遵循特定部分中的模式的链接?

java - not() 和 ends-with() 的 Xpath 错误

.net - 构建项目之前的 VB.NET EnvDTE 最新检查

c# - 如何在异常处理程序 - WebAPI 中获取请求 JSON 消息?

.net - WCF 4.0 Rest Service 返回内容类型 text/html

c# - 多态设计题

php - 将节点添加到XML树的更深层分支中