我在.NET中使用XPath来解析XML文档,类似于:

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

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

问题是stuffChild的XPath查询总是返回第一个stuff元素的子元素,而不是其余元素。 XPath不能用于查询单个XMLElement吗?

===============>>#1 票数:10 已采纳

//在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教程以易于理解的格式提供有用的信息。

===============>>#2 票数:2

你在stuffChild前面使用的//意味着你要从root开始寻找stuffChild元素。

如果要从当前节点(当前节点的.// )开始,则应使用.// ,如下所示:

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

===============>>#3 票数:1

如果“stuffChild”是“stuff”的子节点,那么你的xpath应该是:

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

===============>>#4 票数:-1

选择单个节点意味着您只需要第一个元素。 所以,最好的解决方案是:

XmlNode stuffChild = stuff.SelectSingleNode("descendant::stuffChild[1]");

  ask by FlySwat translate from so

未解决问题?本站智能推荐:

1回复

XPath选择匹配的节点

我有一个看起来像这样的XML: 我需要一个xPath返回所有符合以下条件的Period节点: 节点CodeOut / CodeIn具有我在数组中拥有的任何值的值 该节点CodeOut可以命名为CodeOut或CodeIn ,但是其中只有一个 TimePeriod
2回复

XPath:根据其他节点的值选择节点

假设我有一个项目列表,每个项目都有自己的<id>元素。 还有一个<primaryId>元素(提到的列表之外),指定这些项目中的哪一个是“ primary”。 如何选择“主要”项目的<value>元素? 是否可以在.Net中使用XPath? 以下示例
2回复

Xpath使用节点选择转义的节点

我有这个xml: 如何在已用&lt和&gt进行转义的强标签中选择文本 在此示例中,选择应为: 你好 再次问好 更新必须为XSLT 1.0
2回复

XPath选择正确级别的节点

我有以下(简化)XML ... 我正在使用以下内容从根元素获取Id 在这种情况下,Element.Value包含用户ID root id的正确选择器是什么?
5回复

XPath表达式以选择所有节点

我想在给定的XmlNode中找到所有<Field />节点(可以任意嵌套)。 如果执行以下操作: 这将返回整个文档中的所有节点,而不是node下的所有node 。 这是XPath应该如何工作的吗? 我查看了一些文档,似乎//Node查询的作用域应为调用它的任何节
1回复

在C#中使用XPath选择空白节点

我有以下代码 注意我的根节点中的空格。 ws为空。 这是为什么 ? 我可以找到一些示例,其中多余的空白节点在查询结果中蔓延开来,但我找不到其他方法。 谢谢 编辑:如果我的xml是 该查询工作正常。 但是在这种情况下,节点的类型为SignificantW
4回复

如何在C#中选择带有XPath的节点?

简单的问题,我只想从<Template>标签中选择文本。 这就是我所拥有的,但Xpath与任何东西都不匹配。
2回复

XPath选择仅包含一个无子节点的最上层节点

我正在寻找.NET中的XPath,该XPath仅选择仅包含一个终端(无子节点)节点的最高节点 我想摆脱无用的嵌套项目,并尽可能推广终端: 编辑 我想我越来越近了 可以通过以下方式选择端子
1回复

使用XPATH在具有命名空间的XML中选择节点的问题

我有以下XPATH行: // det [@ nItem =“ 1”] / prod / cProd 这样就可以使用XPath Visualizer成功选择所需的节点,该节点会自动识别名称空间,并定义要选择的名称空间。 当我使用以下XPATH代码在C#中指定名称空间时:
2回复

C#XPATH选择属性,其中子节点内部Text为

我有这个XML文件: 我想选择<item stufe>的属性,其中<item >是“ Hi”,“ Hello”或其他。 我有这段代码,可以正常工作: 但这会选择整个文档中的每个“学习”。 不起作用 什么才是我想要的正确模式?