如何创建通用XSLT为任意格式XML输入添加外层包裹节点
通用XSLT改造方案
修改后的通用版本如下,可适配任意根节点的XML输入:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" version="1.0"> <xsl:output method="xml" indent="yes"/> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <!-- 匹配任意根节点,无需指定具体节点名 --> <xsl:template match="/*"> <soap:envelope> <soap:body> <xsl:copy-of select="."/> </soap:body> </soap:envelope> </xsl:template> </xsl:stylesheet>
核心修改说明
- 新增
soap命名空间声明:在xsl:stylesheet标签中添加xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/",避免命名空间未定义报错,可根据实际使用的SOAP版本调整命名空间地址。 - 匹配规则改为
/*:XPath中/*代表匹配XML文档的根元素,不管根元素的节点名是Order、Invoice还是其他任意值,都会触发该模板逻辑。 - 复制逻辑改为
select=".":保留完整的根节点及所有子内容,避免原写法只复制根节点子节点、丢失根节点本身的问题,和期望的输出格式完全匹配。
内容的提问来源于stack exchange,提问作者gamedev
相关产品推荐
相关产品推荐

