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

XSLT统计第一个<b>容器下的<c>节点数量问题

解决第一个<b>容器内<c>节点的统计问题

嘿,刚学XML两天就能上手尝试XSLT统计已经超棒啦!别担心表述的问题,咱们一步步来搞定你的需求~

首先明确你的核心目标:只统计第一个<b>节点下的所有<c>节点数量,而不是所有<b>容器里的总和。你当前用的count(RatedShipment/RatedPackage)会统计所有RatedShipment下的RatedPackage,这就是结果不符合预期的原因。

正确的XPath表达式写法

要实现只统计第一个容器内的节点,你需要用XPath的**位置谓词[1]**来定位到第一个RatedShipment(也就是你说的<b>容器),然后再统计它下面的RatedPackage(<c>节点)。

正确的表达式应该是:

count(RatedShipment[1]/RatedPackage)

如果你的XML结构有根节点(比如<root>或者<Shipment>),记得把根节点路径加上,避免上下文出错:

count(/Shipment/RatedShipment[1]/RatedPackage)

几个需要注意的坑

  • 大小写敏感:XML节点名是区分大小写的,比如ratedShipment和RatedShipment是完全不同的节点,一定要确保表达式里的节点名和XML里的完全一致。
  • 命名空间问题:如果你的XML里带有命名空间(比如开头有xmlns="http://your-namespace.com"),那你需要在XSLT里绑定命名空间前缀,再用前缀来访问节点。例如:
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns="http://your-namespace.com">
      <xsl:template match="/">
        <xsl:value-of select="count(ns:Shipment/ns:RatedShipment[1]/ns:RatedPackage)"/>
      </xsl:template>
    </xsl:stylesheet>
    
  • 上下文节点:如果你的<xsl:value-of>是在某个子模板里,要注意当前的上下文是不是根节点。如果不是,记得用绝对路径(以/开头)或者相对路径调整,避免选到错误的节点。

完整示例

假设你的XML结构是这样的:

<Shipment>
  <RatedShipment>
    <RatedPackage>包裹1</RatedPackage>
    <RatedPackage>包裹2</RatedPackage>
    <RatedPackage>包裹3</RatedPackage>
  </RatedShipment>
  <RatedShipment>
    <RatedPackage>包裹4</RatedPackage>
  </RatedShipment>
</Shipment>

对应的XSLT代码可以写成:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <第一个包裹容器的数量>
      <xsl:value-of select="count(Shipment/RatedShipment[1]/RatedPackage)"/>
    </第一个包裹容器的数量>
  </xsl:template>
</xsl:stylesheet>

运行这个XSLT后,会输出<第一个包裹容器的数量>3</第一个包裹容器的数量>,正好是第一个RatedShipment里的RatedPackage数量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:29:58