我需要将顺序 XML 节点列表转换为层次结构,但我遇到了一些 XSLT 特定的知识差距。输入 XML 包含文章、颜色和尺寸。在下面的示例中,“Record1”是一篇文章,“Record2”代表一种颜色,“Record3”是尺寸。颜色和大小(记录 2 和记录 3)元素的数量可能会有所不同。
<root>
<Record1>...</Record1>
<Record2>...</Record2>
<Record3>...</Record3>
<Record3>...</Record3>
<Record2>...</Record2>
<Record3>...</Record3>
<Record3>...</Record3>
<Record3>...</Record3>
<Record3>...</Record3>
<Record1>...</Record1>
<Record2>...</Record2>
<Record3>...</Record3>
<Record3>...</Record3>
<Record2>...</Record2>
<Record3>...</Record3>
<Record3>...</Record3>
<Record3>...</Record3>
<Record3>...</Record3>
</root>
所有字段都在同一层级上,但我仍然必须创建这个结构作为输出:
<root>
<article> -> Record1
<color> -> Record2
<size>...</size> -> Record3
<size>...</size> -> Record3
</color>
<color> -> Record2
<size>...</size> -> Record3
<size>...</size> -> Record3
<size>...</size> -> Record3
<size>...</size> -> Record3
</color>
</article>
<article> -> Record1
<color> -> Record2
<size>...</size> -> Record3
<size>...</size> -> Record3
</color>
<color> -> Record2
<size>...</size> -> Record3
<size>...</size> -> Record3
<size>...</size> -> Record3
<size>...</size> -> Record3
</color>
</article>
</root>
我尝试按顺序迭代节点,但例如,在处理“颜色”(=record2) 节点时,“文章”(=record1) 节点标签需要保持未关闭状态。处理未关闭“颜色”的“大小”(=record3) 的计数相同,但 XSLT 不允许这样做。我的下一个想法是为每篇文章、颜色和大小级别调用一个模板,但我不知道如何选择当前“record2”和“record1”表示的下一篇文章之间的所有“record3”节点。
我对 XSLT 版本也有限制,因为我需要在仅支持 XSLT 1.0 的 BizTalk Server 中进行此转换
有人可以将我推向正确的方向吗?