【发布时间】:2018-02-23 08:29:37
【问题描述】:
我已经搜索了所有 xslt 映射问题,但还没有找到针对我的具体案例的解决方案。
所以,假设这是我的源 XML:
<Data>
<A val='1'>
<CC>1234</CC>
</A>
<A val='2'>
<CC>1234</CC>
<CC>5678</CC>
</A>
<A val='3'>
<CC>1234</CC>
</A>
<B val='1'>
<CC>5678</CC>
</B>
<B val='2'>
<CC>1234</CC>
<CC>9012</CC>
</B>
</Data>
我想要的结果如下:
<Data>
<A val='1'>
<CC>-1</CC>
</A>
<A val='2'>
<CC>-1</CC>
<CC>-2</CC>
</A>
<A val='3'>
<CC>-1</CC>
</A>
<B val='1'>
<CC>-2</CC>
</B>
<B val='2'>
<CC>-1</CC>
<CC>-3</CC>
</B>
</Data>
如果我要用某种编程语言对此进行编码,我会首先将所有 CC 值放入一个集合/集合中,然后当我知道所有可能的 CC 值时,我会遍历集合并替换 XML 中的值使用在循环内减少的计数器。但我不知道如何在 XSLT 中做到这一点...... 所以在上面的例子中,我的 CC 值是 1234、5678 和 9012。 迭代值时,所有具有 1234 的 CC 值应变为 -1、5678 ==> -2 和 9012 ==>-3 无论 CC 是在 A 还是 B 之下强>。如果 5678 映射到 -1、9012 映射到 -2 和 1234 映射到 -3 也可以,但是 1234 的所有 出现必须更改为 -3,依此类推。 感谢您的帮助!
【问题讨论】:
-
请解释确定新
CC值背后的逻辑,因为简单地减少一个计数器不会导致一个序列,例如-1,-3用于最后一个B或以-2开头的序列用于第一个B。 -
您确实需要将 XSLT 问题标记为 XSLT 1.0、2.0 或 3.0,因为除了最简单的问题之外,解决方案可能完全不同,如果您提供 2.0 的解决方案,那是浪费时间您必须使用 1.0(如果您可以使用 2.0,那么创建 1.0 解决方案会更加浪费时间)。