我有一个从Java映射转换而来的XML。因此,所有映射键都将转换为节点名称。 XML结构如下
<map>
<firstName>AAA</firstName>
<firstName1>BBB</firstName1>
<firstName2>CCC</firstName2>
<firstName3>DDD</firstName3>
</map>
我正在尝试编写一个for-each循环以从此XML中提取数据以创建输出XML。我已经尝试了大多数可用的选项,例如name(),local-name(),contains()等,但是无法解决问题。增量节点名称最多可以增加100个或更多,因此有哪些可用选项。编码循环中的任何输入都会有很大帮助。我正在使用XSLT 1.0。
最佳答案
有很多方法可以选择顶部元素(map
)的子元素:
/*/*
这将选择属于XML文档top元素的所有元素。
/*/*[starts-with(name(), 'firstName')]
这将选择所有顶部元素的子元素,其名称以字符串
'firstName'
开头。/*/*[starts-with(name(), 'firstName')
and floor(substring-after(name(), 'firstName')) = substring-after(name(), 'firstName')) ]
这将选择所有顶部元素的子元素,其名称以字符串
'firstName'
开头,其后的其余子字符串为整数。/*/*[starts-with(name(), 'firstName')
and translate(name(), '0123456789', '') = 'firstName')) ]
这将选择所有顶部元素的子元素,其名称以字符串
'firstName'
开头,其后的其余子字符串仅包含数字。最后,在XPath 2.0(XSLT 2.0)中,可以使用正则表达式:
/*/*[matches(name(), '^firstName\d+$')]
关于xslt - 使用<xsl:for-each>作为增量元素名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15627290/