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> </xsl:text> </xsl:for-each> </xsl:template> </xsl:stylesheet>
如果你的XML结构和我模拟的不一样(比如父元素不是counter,或者pickup的层级不同),只需要调整XPath里的元素名称和层级路径就行,核心的count(pickup) > 1筛选逻辑是通用的。
内容的提问来源于stack exchange,提问作者Michael Alterio
相关产品推荐
相关产品推荐

