如何通过XSLT 1.0转换批量提取XML节点A的所有属性?
XSLT 1.0批量提取节点A的所有属性
问题描述
原始XML文档:
<A a_1="a1" a_2="a2"/> <B> <C> hello </C> </B>
需求是通过XSLT 1.0转换,仅筛选出节点"A"的所有属性。目前已能通过逐个指定属性的方式实现:
<A a_1="{A/@a_1}" a_2="{A/@a_2}">
但希望找到无需逐个定义属性的批量获取方法,预期输出:
<A a_1="a1" a_2="a2">
解决方案
可以使用XSLT 1.0的<xsl:copy-of>指令批量复制节点A的所有属性,完整的XSLT代码如下:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <!-- 创建新的A节点 --> <A> <!-- 批量复制原始A节点的所有属性 --> <xsl:copy-of select="/A/@*"/> </A> </xsl:template> </xsl:stylesheet>
说明
<xsl:copy-of select="/A/@*"/>会选中根节点下A元素的所有属性(@*表示匹配所有属性),并直接复制到新创建的<A>节点中,无需逐个指定属性名。- 该方法会完整保留原始属性的名称和值,完全满足批量获取的需求。
内容的提问来源于stack exchange,提问作者Carlitos Overflow
相关产品推荐
相关产品推荐

