首页 > 解决方案 > 在 XSLT 1.0 中删除重复项

问题描述

我有以下 .XML:

<tables>
    <table tableshort="WR">
        <field fieldno="108" fid="108" value="0">0</field>
        <field fieldno="7026" fid="7026">961234</field>
        <field fieldno="7020" fid="7020">Type 002</field>
        <field fieldno="13" fid="13">01.01.2021</field>
        <field fieldno="14" fid="14">02.01.2021</field>
        <field fieldno="7046" fid="7046">Freq 002</field>
        <field fieldno="7055" fid="7055">EUR</field>
        <field fieldno="7061" fid="7061">7000</field>
        <field fieldno="7033" fid="7033">1200</field>
        <field fieldno="7034" fid="7034">1300</field>
        <field fieldno="7036" fid="7036">1001</field>
        <field fieldno="7039" fid="7039">1002</field>
    </table>
    <table tableshort="WR">
        <field fieldno="108" fid="108" value="0">0</field>
        <field fieldno="7026" fid="7026">961234</field>
        <field fieldno="7020" fid="7020">Type 002</field>
        <field fieldno="13" fid="13">01.01.2021</field>
        <field fieldno="14" fid="14">02.01.2021</field>
        <field fieldno="7046" fid="7046">Freq 002</field>
        <field fieldno="7055" fid="7055">EUR</field>
        <field fieldno="7061" fid="7061">7000</field>
        <field fieldno="7033" fid="7033">1200</field>
        <field fieldno="7034" fid="7034">1300</field>
        <field fieldno="7036" fid="7036">1001</field>
        <field fieldno="7039" fid="7039">1002</field>
    </table>
    <table tableshort="WR">
        <field fieldno="108" fid="108" value="0">0</field>
        <field fieldno="7026" fid="7026">961234</field>
        <field fieldno="7020" fid="7020">Type 003</field>
        <field fieldno="13" fid="13">02.01.2021</field>
        <field fieldno="14" fid="14">03.01.2021</field>
        <field fieldno="7046" fid="7046">Freq 001</field>
        <field fieldno="7055" fid="7055">EUR</field>
        <field fieldno="7061" fid="7061">7001</field>
        <field fieldno="7033" fid="7033">1201</field>
        <field fieldno="7034" fid="7034">1301</field>
        <field fieldno="7036" fid="7036">1002</field>
        <field fieldno="7039" fid="7039">1000</field>
    </table>
    <table tableshort="WR">
        <field fieldno="108" fid="108" value="0">0</field>
        <field fieldno="7026" fid="7026">732441</field>
        <field fieldno="7020" fid="7020">Type 001</field>
        <field fieldno="13" fid="13">01.01.2021</field>
        <field fieldno="14" fid="14">02.01.2021</field>
        <field fieldno="7046" fid="7046">Freq 002</field>
        <field fieldno="7055" fid="7055">EUR</field>
        <field fieldno="7061" fid="7061">5000</field>
        <field fieldno="7033" fid="7033">2200</field>
        <field fieldno="7034" fid="7034">3300</field>
        <field fieldno="7036" fid="7036">5001</field>
        <field fieldno="7039" fid="7039">4000</field>
    </table>
</tables>

然后我有一个带有以下代码的 .XSLT:

<xsl:variable name="wr_root" select="/tables/table[@tableshort='WR']"/>

...

<xsl:for-each select="$wr_root">
    <row>
        ...
    </row>                  

正如您在 .XML 中看到的那样,存在重复的条目。我只想列出唯一的 ID (fieldno="7026"),因此 .XSLT 应该只列出 961234 和 732441 的出现。

我尝试使用以下 select(),但它不起作用:

<xsl:for-each select="//wr_root[not(field[@fieldno=7026]=preceding::wr_root/field[@fieldno=7026])]">

我读这篇文章作为参考: https ://www.oreilly.com/library/view/xslt-cookbook/0596003722/ch04s03.html

关于如何解决这个问题的任何想法?谢谢,

标签: xmlxslt

解决方案


推荐阅读