xslt - 使用<xsl:for-each>作为增量元素名称

标签 xslt xpath foreach xslt-1.0

我有一个从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/

相关文章:

xml - 您可以转换无序的 xml 以匹配 xsd :sequence order?

xml - 使用查找的 XSLT

html - 在 XSL 样式表中显示带有 .CSS 链接的 Bootstrap HTML?

xml - 甲骨文 XPath : Selecting first occurrence of an element

xpath - 什么 XPath 选择 <tr> 中的一个元素,该元素在其 <td> 标签之一中具有特定的 'X'

php - foreach 中的 if 语句仅检查最后一个值

xml - 在 XSLT 中,您如何测试变量是否存在?

xpath - 如何找到最后一个元素

javascript - 循环两个对象数组,在 Id 上连接并合并它们

java - 我如何按照创建它的相同顺序解析 map (foreach)(JAVA)