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

XSL与XPath 1.0语法求助:筛选含多个pickup的元素并返回counter_name

没问题,我来帮你搞定这个需求!

首先,假设你的XML结构大概是这样(我先模拟一个常见的场景,你可以根据实际结构调整):

<counter_list>
  <counter>
    <counter_name>Airport Main Counter</counter_name>
    <pickup_points>
      <pickup>Terminal 1 Door A</pickup>
      <pickup>Parking Garage B</pickup>
    </pickup_points>
  </counter>
  <counter>
    <counter_name>Downtown Kiosk</counter_name>
    <pickup_points>
      <pickup>Main Street Entrance</pickup>
    </pickup_points>
  </counter>
  <counter>
    <counter_name>Train Station Hub</counter_name>
    <pickup_points>
      <pickup>Platform 3 Exit</pickup>
      <pickup>Ticketing Office Side</pickup>
      <pickup>Bus Bay 5</pickup>
    </pickup_points>
  </counter>
</counter_list>

核心XPath筛选逻辑

要定位到所有包含多个pickup节点的元素,并提取对应的counter_name,可以用这条XPath表达式:

//counter[count(.//pickup) > 1]/counter_name
  • //counter:匹配所有层级的counter元素
  • count(.//pickup) > 1:筛选出后代中包含1个以上pickup节点的counter
  • /counter_name:直接定位到符合条件的counter_name节点

如果你的pickup是直接作为counter的子节点(不是嵌套在其他元素里),可以简化成:

//counter[count(pickup) > 1]/counter_name

XSLT完整实现示例

下面是一个可直接使用的XSLT脚本,它会输出所有符合条件的counter_name,每行一个:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" encoding="UTF-8" />

  <xsl:template match="/">
    <!-- 遍历所有满足条件的counter元素 -->
    <xsl:for-each select="//counter[count(.//pickup) > 1]">
      <!-- 输出counter_name并换行 -->
      <xsl:value-of select="counter_name" />
      <xsl:text>&#10;</xsl:text>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

如果你的XML结构和我模拟的不一样(比如父元素不是counter,或者pickup的层级不同),只需要调整XPath里的元素名称和层级路径就行,核心的count(pickup) > 1筛选逻辑是通用的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 06:43:10