为何我的XSLT未向<soapenv:Envelope>元素添加第二个属性
问题解决方案
根因
你的XSLT顶层<xsl:stylesheet>元素的exclude-result-prefixes属性将ser加入了排除列表,这是<soapenv:Envelope>上的xmlns:ser声明被丢弃的直接原因。
exclude-result-prefixes的作用是告知XSLT处理器:列表内的命名空间前缀如果没有在输出内容的元素/属性名称中被使用,就不会输出对应的命名空间声明;即便有使用,处理器也会优先将命名空间声明放到首次使用对应前缀的节点(也就是你代码中的<ser:Process>元素)上,你手写在<soapenv:Envelope>上的xmlns:ser声明会被优化移除。
修复方法
将ser和不必要的soapenv从exclude-result-prefixes的取值中移除,仅保留仅用于匹配源XML、输出不会用到的fm前缀即可,修改后的样式表头配置如下:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ser="http://services.visionwebqa.com" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:fm="http://www.filemaker.com/fmpxmlresult" exclude-result-prefixes="fm">
修改后重新执行转换,输出的<soapenv:Envelope>就会同时携带两个命名空间声明,符合预期。
内容的提问来源于stack exchange,提问作者JMW
相关产品推荐
相关产品推荐

