You need to enable JavaScript to run this app. 如何使用XSLT提取嵌套在XML标签内的ISO-8859-1编码XML内容
优惠活动
大模型
产品
解决方案
定价
更多

如何使用XSLT提取嵌套在XML标签内的ISO-8859-1编码XML内容

XSLT提取嵌套ISO-8859-1编码XML内容问题解决方案

问题根因

  • 节点选择错误:当前XSLT中XPath表达式select="XML"试图获取<return>标签下的<XML>子节点,但入站SOAP报文中的<return>标签直接存储转义后的XML文本,无<XML>子节点,因此无法匹配到内容,导致输出为空。
  • 编码声明冲突:嵌套的XML内容头部声明为ISO-8859-1编码,与预期输出的UTF-8编码不匹配,需要额外处理替换。

修正后的XSLT代码

<?xml version="1.0" encoding="UTF-8"?>
<ns0:stylesheet version="2.0"
    xmlns="http://www.issnetonline.com.br/webservice/nfd"
    xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:ns0="http://www.w3.org/1999/XSL/Transform"
    xmlns:ns2="http://www.betha.com.br/e-nota-contribuinte-ws">
    <!-- 指定输出配置:UTF-8编码、保留缩进、不自动添加XML声明 -->
    <ns0:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>
    <ns0:template match="/env:Envelope/env:Body/ns2:GerarNfseResponse/return">
        <!-- 输出符合预期的UTF-8编码XML头 -->
        <ns0:text disable-output-escaping="yes">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?&gt;&#xA;</ns0:text>
        <!-- 读取return标签文本,移除原有ISO编码声明后输出,关闭转义还原XML结构 -->
        <ns0:value-of select="replace(., '&lt;\?xml[^?]+\?&gt;', '')" disable-output-escaping="yes"/>
    </ns0:template>
</ns0:stylesheet>

核心修改说明

  • 修正节点选择逻辑:直接读取<return>标签的文本内容,而非不存在的<XML>子节点
  • 明确输出配置:通过xsl:output指定输出编码为UTF-8,避免默认编码异常
  • 处理编码声明冲突:用XSLT 2.0的replace函数移除原有嵌套XML的ISO-8859-1编码声明,统一输出符合要求的UTF-8编码声明
  • 保留disable-output-escaping配置:确保转义的XML标签被正确还原为可解析的XML结构
    修改后运行即可得到你预期的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 18:45:08