将聊天表从一个元素转换为另一个元素

时间:2017-05-22 10:59:32

标签: xml xslt xpath

输入文件:

    <?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。

1 个答案:

答案 0 :(得分:0)

如果您真的受限于XSLT 1.0,则必须分三步完成:

  1. 标记 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"/>
    
  2. 使用EXSLT exsl:node-set()函数(或其他类似函数)将变量转换为 node-set 你的处理器)。

  3. 分组 chat属性下的项目,使用Muenchian grouping

  4. 这里有很多例子说明了如何完成每一步。如果遇到问题,请发布特定的问题。

    请注意,某些XSLT处理器支持一些在此处有用的扩展功能 - 特别是:str:tokenize()set:distinct()