XSLT实现仅复制指定元素及其子元素、排除父节点的方法
问题根因
原有XSLT存在两处核心错误:
- 未显式匹配XML根节点
/,触发XSLT内置的默认递归处理规则,顺着节点层级把根下的<company>父节点完整输出 - 固定插入的
<header>节点直接写在xsl:stylesheet根节点下属于非法语法,未纳入模板匹配逻辑,被内置模板按文本规则错误处理,同时原代码存在游离的</parent>闭合标签,结构本身不合法。
可用的正确XSLT代码
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> <parent> <header>Some inserted text</header> <!-- 直接提取所有staff节点深拷贝,跳过company父层级 --> <xsl:copy-of select="//staff"/> </parent> </xsl:template> </xsl:stylesheet>
逻辑说明
- 显式匹配根节点后,完全自定义输出的外层结构,阻断内置模板的默认递归逻辑,不会输出多余的
<company>父节点 xsl:copy-of会对选中的<staff>节点做深拷贝,自动保留节点属性、全部子节点内容,不需要额外编写子元素匹配模板,逻辑简洁- 所有固定插入的静态节点都放在根匹配模板内部,不会出现标签被错误包裹的问题。
内容的提问来源于stack exchange,提问作者tm1701
相关产品推荐
相关产品推荐

