输入文件:
<?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。
答案 0 :(得分:0)
如果您真的受限于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()
函数(或其他类似函数)将变量转换为 node-set
你的处理器)。
分组 chat
属性下的项目,使用Muenchian grouping。
这里有很多例子说明了如何完成每一步。如果遇到问题,请发布特定的问题。
请注意,某些XSLT处理器支持一些在此处有用的扩展功能 - 特别是:str:tokenize()
和set:distinct()
。