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> </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> </xsl:text>让每个TSP名称单独一行,提升可读性。
内容的提问来源于stack exchange,提问作者vsam490
相关产品推荐
相关产品推荐

