【问题标题】:Remove duplicates from xml (two conditions)从 xml 中删除重复项(两个条件)
【发布时间】:2015-08-11 11:18:22
【问题描述】:

我正在寻找用于消除 xml 文件中重复项的 xslt 解决方案。 该文件是使用名为 epgrab 的软件创建的。它从 dvb-s 转发器中获取 epg 数据并将其保存到 *.xml 文件中。 这里的问题是我们每天要多次读取epg,因为一些数据在一小时左右内发生了变化,我们需要及时获得实际的epg数据。有时会发生条目有重复项。 这些需要消除,因为网络服务器不应在每次有人打开我们的 iptv 前端时读取 10 兆字节的文件。

xml 文件如下所示:

    <programme channel="28007.dvb.guide" start="20150811143300 +0200" stop="20150811151800 +0200">
    <title lang="de">Traumstädte: Stockholm - Die Entspannte</title>
    <sub-title lang="de">Film von Ines Trams</sub-title>
    <desc lang="de">Stockholm ist eine schwimmende Metropole mit einzigartiger Stadtgeografie: Jeweils ein Drittel der Stadtfläche b$
    <language>de</language>
    <!--language>mul</language-->
        <!--language>mis</language-->
        <!--language>de</language-->
    <video>
      <aspect>16:9</aspect>
    </video>
    <audio>
      <stereo>stereo</stereo>
    </audio>
    <subtitles type="teletext">
      <language>de</language>
    </subtitles>
  </programme>

这里的问题是我们需要检查通道 PID 和开始/停止时间——不仅仅是一个条件。 使用 xslt-1.0 是否有可能?

感谢您的帮助!

编辑:感谢 Martin Honnen 格式化我的代码:>

【问题讨论】:

    标签: xml xslt xslt-1.0


    【解决方案1】:

    使用 XSLT 1.0 对项目进行分组,称为 Muenchian 分组的方法基于键,因此您可以定义键 &lt;xsl:key name="group" match="programme" use="concat(@channel, '|', @start, '|', @stop)"/&gt;,有关详细信息,请参阅 http://www.jenitennison.com/xslt/grouping/muenchian.xml

    【讨论】:

    • 谢谢马丁。我用你提供的密钥试过了,但我没有让它正常工作..
    • 考虑使用您想要订购的一些示例数据来编辑您的问题,向我们展示您想要的该示例的结果。您当前的尝试没有多大意义,因为您有key('group', @fieldName) 而您的元素没有名为fieldName 的属性。因此,您需要确保使用计算键值的表达式,例如match="programme[generate-id() = generate-id(key('group', concat(@channel, '|', @start, '|', @stop))[1])]"
    • 嗨,马丁,谢谢您的回答。现在一切正常 - 我将“fieldName”更改为您两天前提供的 xsl:key,现在它可以正常工作了。我试图消除看起来与我提供的代码完全相同的条目。该文件多次包含相同的条目 ()。现在我能够消除所有重复项。你拯救了我的一天!
    猜你喜欢
    • 1970-01-01
    • 2018-05-16
    • 2015-07-09
    • 2021-03-20
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多