输入文件:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<a>
<notice>100</notice>
<chat>10, 20, 30, 40</chat>
</a>
<a>
<notice>101</notice>
<chat>40, 50, 60</chat>
</a>
<a>
<notice>102</notice>
<chat>10, 30, 60</chat>
</a>
<a>
<notice>103</notice>
<chat>70, 10, 20</chat>
</a>
</root>
我的要求是创建一个聊天条目并找到受影响的通知,如以下示例所示:
<a>
<chat>10</chat>
<notice>100, 102, 103</notice>
</a>
<a>
<chat>20</chat>
<notice>100, 103</notice>
</a>
<a>
<chat>30</chat>
<notice>100, 102</notice>
</a>
注意:我必须使用 1.0 版本的 XSLT。
如果您确实仅限于 XSLT 1.0,则必须分三个步骤执行此操作:
-
标记
chat
值。理想情况下,在此步骤结束时,您 将有一个包含以下内容的变量:<item notice="100" chat="10"/> <item notice="100" chat="20"/> <item notice="100" chat="30"/> <item notice="100" chat="40"/> <item notice="101" chat="40"/> <item notice="101" chat="50"/> <item notice="101" chat="60"/> <item notice="102" chat="10"/> <item notice="102" chat="30"/> <item notice="102" chat="60"/> <item notice="103" chat="70"/> <item notice="103" chat="10"/> <item notice="103" chat="20"/>
-
使用 EXSLT
exsl:node-set()
函数(或 支持的其他类似函数)将变量转换为节点集您的处理器)。 -
使用明基安分组按
chat
属性对项目进行分组。
这里有很多示例显示了如何执行每个步骤。如果您遇到问题,请发布特定问题。
请注意,某些 XSLT 处理器支持一些扩展函数,这些函数在这里可能会有所帮助 - 特别是:str:tokenize()
和set:distinct()
。