我在.NET中使用XPath来解析XML文档,类似于:
XmlNodeList lotsOStuff = doc.SelectNodes("//stuff");
foreach (XmlNode stuff in lotsOStuff) {
XmlNode stuffChild = stuff.SelectSingleNode("//stuffChild");
// ... etc
}
Run Code Online (Sandbox Code Playgroud)
问题是XPath Query for stuffChild总是返回第一个stuff元素的子元素,而不是其余元素.XPath不能用于查询个人XMLElement吗?
Chr*_*org 10
//在XPath表达式的开头,从文档根开始.试试".//stuffChild"..self :: node()的简写,它将设置搜索的上下文,//是后代轴的简写.
所以你有了:
XmlNode stuffChild = stuff.SelectSingleNode(".//stuffChild");
Run Code Online (Sandbox Code Playgroud)
转换为:
xmlNode stuffChild = stuff.SelectSingleNode("self :: node()/ descendant :: stuffChild");
xmlNode stuffChild = stuff.SelectSingleNode("self::node()/descendant-or-self::stuffChild");
Run Code Online (Sandbox Code Playgroud)
在子节点可以与父节点具有相同名称的情况下,您可能希望使用后面稍微详细的语法,以确保您不重新选择父节点:
xmlNode stuffChild = stuff.SelectSingleNode("self::node()/descendant::stuffChild");
Run Code Online (Sandbox Code Playgroud)
另请注意,如果"stuffChild"是"stuff"的直接后代,则可以完全省略前缀,只需选择"stuffChild"即可.
XmlNode stuffChild = stuff.SelectSingleNode("stuffChild");
Run Code Online (Sandbox Code Playgroud)
该W3Schools的教程有一个简单有用的信息消化格式.
| 归档时间: |
|
| 查看次数: |
8482 次 |
| 最近记录: |