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

如何修改XSLT输出的XML声明为单引号并添加SOAP信封?

如何将XSLT输出的XML声明引号改为单引号

你已经通过XSLT完成了SOAP信封的添加,但需要将输出XML声明的双引号替换为单引号,以下是几种可行方案:

方法1:利用XSLT处理器的特定参数

不同XSLT处理器支持自定义输出格式的参数,可直接控制XML声明的引号类型:

  • Saxon:可通过命令行参数或代码配置实现,比如命令行中添加参数指定引号样式:
java -jar saxon-he.jar -s:input.xml -xsl:transform.xsl -o:output.xml !declare-quotation='"'
  • Xalan:在Java调用时,可通过设置输出格式的扩展属性,指定使用单引号输出声明。
    (注:具体参数需参考对应处理器的官方文档,不同版本可能有差异)

方法2:输出后做文本替换

如果无法通过处理器参数控制,可在XSLT输出XML文件后,对文本内容做针对性替换:
只替换开头的XML声明,避免误改文档内的其他双引号。比如用Python脚本处理:

with open("output.xml", "r", encoding="utf-8") as f:
    content = f.read()
# 仅替换首次出现的XML声明
content = content.replace('<?xml version="1.0" encoding="UTF-8"?>', "<?xml version='1.0' encoding='UTF-8'?>", 1)
with open("final_output.xml", "w", encoding="utf-8") as f:
    f.write(content)

方法3:使用XSLT 2.0+手动输出声明

如果使用支持XSLT 2.0及以上的处理器,可关闭自动输出声明,手动写出带单引号的XML声明:
修改你的XSLT代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <!-- 关闭自动生成XML声明 -->
    <xsl:output method="xml" omit-xml-declaration="yes"/>
    
    <xsl:template match="/">
        <!-- 手动输出带单引号的XML声明,禁用转义确保格式正确 -->
        <xsl:text disable-output-escaping="yes">&lt;?xml version='1.0' encoding='UTF-8'?&gt;&#10;</xsl:text>
        <!-- 原有SOAP信封逻辑保持不变 -->
        <soapenv:Envelope
            xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
            xmlns:p="http://.xml.invoice.com">
            <soapenv:Header/>
            <soapenv:Body>
                <xsl:copy-of select="/*"/>
            </soapenv:Body>
        </soapenv:Envelope>
    </xsl:template>
</xsl:stylesheet>

注意:disable-output-escaping 的支持取决于具体处理器,部分场景下可能无法生效,需实际测试验证。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 20:56:04