如何修改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"><?xml version='1.0' encoding='UTF-8'?> </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
相关产品推荐
相关产品推荐

