You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用XPath选择一组节点的所有子节点及当前节点的所有子节点?

XPath 节点选择问题解答及C#示例

我来帮你理清这两个常见的XPath节点选择问题,结合实际的C#代码来解释:

问题1:如何用XPath选择一组节点的所有子节点?

如果你已经选中了一组节点(比如示例里的//PRODUCT,也就是所有PRODUCT节点),要获取每个节点的所有子节点,可以在相对路径中使用./node()语法。这里的.代表当前节点上下文,node()会匹配所有类型的子节点(包括元素、文本节点、注释等);如果只需要元素类型的子节点,用./*即可。

在你的代码示例中,已经通过SelectNodes("//PRODUCT")拿到了所有PRODUCT节点的集合,之后遍历每个productNode时,就可以用相对路径来选取它的子节点,比如./SUPPLIER_PID就是选取当前PRODUCT节点下的SUPPLIER_PID子元素。

问题2:如何用XPath选择当前节点的所有子节点?

针对单个当前节点(比如遍历中的productNode),有几种常用写法:

  • node():在当前节点的上下文环境中,直接写node()就会匹配它的所有子节点(包含各类节点)
  • ./node():和上面效果一致,.明确指定当前节点,可读性更强
  • 如果只需要元素子节点,用*或者./*就可以

完整C#代码示例

XmlNodeList productNodes = doc.DocumentElement.SelectNodes("//PRODUCT");
Parallel.ForEach(productNodes.Cast<XmlNode>(), (XmlNode productNode) => {
    string _productMode = XmlUtils.nodeAsString(productNode, "@mode");
    Product product = new Product() {
        Mode = XmlUtils.nodeAsString(productNode, "@mode"),
        No = XmlUtils.nodeAsString(productNode, "./SUPPLIER_PID"),
        DescriptionShort = XmlUtils.nodeAsString(productNode, "./PRODUCT_DETAILS/DESCRIPTION_SHORT")
        // 可继续补充其他属性赋值逻辑
    };
    // 后续可添加product的业务处理代码
});

补充说明:

  • @mode是选取当前节点的mode属性,属于属性节点的选择语法
  • ./SUPPLIER_PID是选取当前PRODUCT节点下的直接子元素SUPPLIER_PID
  • ./PRODUCT_DETAILS/DESCRIPTION_SHORT是选取当前节点下PRODUCT_DETAILS子节点中的DESCRIPTION_SHORT元素

内容的提问来源于stack exchange,提问作者causeofhell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:22:44