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

XSL模板处理意大利EIDAS可信列表XML未达预期结果求助

问题分析与解决:提取意大利eIDAS可信服务提供者名称失败

问题场景

尝试对意大利政府官方的可信服务提供者列表XML应用XSL模板,期望提取/TrustServiceStatusList/TrustServiceProviderList/路径下所有TrustServiceProvider的TSP名称,但执行后仅输出XSL模板的第一行,未得到预期结果。

原XSL模板代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <xsl:for-each select="TrustServiceStatusList/TrustServiceProviderList/TrustServiceProvider">
                <xsl:if test="true">
                    <xsl:value-of select="TSPInformation/TSPName/Name"></xsl:value-of>
                </xsl:if>                   
        </xsl:for-each>
   </xsl:template>
</xsl:stylesheet>

核心问题

目标XML文档使用了命名空间(实际为http://uri.etsi.org/02231/v2#),但你的XSL模板没有声明该命名空间,也没有在XPath选择器中使用对应的前缀,导致XSL处理器无法匹配到任何目标节点,最终只能输出默认的XML声明行。

修正后的XSL模板

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:etsi="http://uri.etsi.org/02231/v2#">
    <xsl:template match="/">
        <xsl:for-each select="etsi:TrustServiceStatusList/etsi:TrustServiceProviderList/etsi:TrustServiceProvider">
            <xsl:value-of select="etsi:TSPInformation/etsi:TSPName/etsi:Name"/>
            <!-- 添加换行符,让输出更易读 -->
            <xsl:text>&#10;</xsl:text>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

关键修改说明

  • 声明命名空间:添加xmlns:etsi="http://uri.etsi.org/02231/v2#",用etsi作为该命名空间的前缀(前缀可自定义,只要前后一致即可)。
  • XPath选择器添加前缀:所有节点路径前加上etsi:前缀,确保XSL处理器能正确识别目标命名空间下的节点。
  • 移除无用代码:<xsl:if test="true">条件永远为真,完全没必要保留,直接提取值即可。
  • 优化输出格式:用<xsl:text>&#10;</xsl:text>让每个TSP名称单独一行,提升可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:25:28