我需要用 XSLT 转换一个 XML 文件,这个任务有点棘手。
我有带有名称的属性,attr_1000_a
而数字和后缀是动态的,所以这attr_2000_b
也是有效的。
此外,还有<row>
组合相关数据的元素。我需要对它们进行转换,以便将相同编号的属性(即attr_1000_a
和attr_1000_b
)放入同一个元素中。
让我给你举个例子。以下输入 XML:
<root>
<row id="1">
<foo attr_1000_a="true">1</foo>
<foo attr_1000_b="true">2</foo>
<foo attr_1000_c="true">3</foo>
</row>
<row id="2">
<foo attr_1000_a="true" attr_1000_b="true" attr_1000_c="true">10</foo>
<foo attr_2000_a="true" attr_2000_b="true" attr_2000_c="true">20</foo>
</row>
<row id="3">
<foo attr_1000_a="true" attr_2000_a="true" attr_3000_a="true">100</foo>
<foo attr_1000_b="true" attr_2000_b="true" attr_3000_b="true">200</foo>
<foo attr_1000_c="true" attr_2000_c="true" attr_3000_c="true">300</foo>
</row>
</root>
您可以看到属性可以通过多种方式组合,这使得转换变得困难。每个属性在每个属性中都是唯一的,<row>
但可以位于任何 <foo>
元素中。此外,每个都<foo>
可以有任意数量的属性。
期望的结果:
<result>
<row id="1">
<field attr="1000">
<a>1</a>
<b>2</b>
<c>3</c>
</field>
</row>
<row id="2">
<field attr="1000">
<a>10</a>
<b>10</b>
<c>10</c>
</field>
<field attr="2000">
<a>20</a>
<b>20</b>
<c>20</c>
</field>
</row>
<row id="3">
<field attr="1000">
<a>100</a>
<b>200</b>
<c>300</c>
</field>
<field attr="2000">
<a>100</a>
<b>200</b>
<c>300</c>
</field>
<field attr="3000">
<a>100</a>
<b>200</b>
<c>300</c>
</field>
</row>
</result>
我想我必须以某种方式获取所有数字的列表(例如 1000、2000 和 3000),然后遍历所有具有这种属性的元素。
我如何使用 XSLT 做到这一点?这甚至可能吗?