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

XPath/XSLT无结果返回:获取汽车名称列表的正确表达式

问题分析与解决方案

你的问题出在命名空间的处理上:

  • XML根元素<getCarResponse>属于http://cars-collections.azurewebsites.net/命名空间,但<Rows>标签通过xmlns=""重置了默认命名空间,导致其下的<Car>和<Car_name>都不属于任何命名空间。
  • 原XSLT中用//cars:Car查找元素,相当于在cars命名空间下搜索Car,自然找不到匹配节点,所以没有输出结果。

正确的XPath表达式

  1. 遍历所有Car元素的精准路径:
    /cars:getCarResponse/cars:getCarResult/Rows/Car
    
    或者用通用匹配(适合不确定层级的情况):
    //*[local-name()='Car']
    
  2. 在<xsl:for-each>内部获取当前Car对应的名称,用相对路径:
    Car_name
    

修正后的完整XSLT代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                xmlns:form="http://forms.com/forms" 
                xmlns:cars="http://cars-collections.azurewebsites.net/" 
                exclude-result-prefixes="form cars">
    <xsl:template match="/">
        <form:form-data>
            <form:field>
                <form:name>cars</form:name>
                <form:options>
                    <xsl:for-each select="/cars:getCarResponse/cars:getCarResult/Rows/Car">
                        <form:option>
                            <form:label>
                                <xsl:value-of select="Car_name"/>
                            </form:label>
                            <form:value>
                                <xsl:value-of select="Car_name"/>
                            </form:value>
                        </form:option>
                    </xsl:for-each>
                </form:options>
            </form:field>
        </form:form-data>
    </xsl:template>
</xsl:stylesheet>

关键说明

  • 外层的getCarResponse和getCarResult必须带cars:前缀,因为它们属于目标命名空间;
  • Rows、Car、Car_name无命名空间,直接写元素名即可;
  • for-each内部用相对路径Car_name,确保每次只取当前循环的Car元素下的名称,避免全局匹配重复输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:19:52