【问题标题】:How to compare the values with other nodes values in XSLT and output the unique values如何将值与 XSLT 中的其他节点值进行比较并输出唯一值
【发布时间】:2021-12-28 09:55:38
【问题描述】:

我有以下 xml 文件。如果结束日期是另一个节点的开始日期,我需要删除每个节点的结束日期。

    <time_Off_Event_group>
        <StartDate>20211206</StartDate>
        <EndDate>20211207</EndDate>
    </time_Off_Event_group>
    <time_Off_Event_group>
        <StartDate>20211209</StartDate>
        <EndDate>20211210</EndDate>
    </time_Off_Event_group>
    <time_Off_Event_group>
        <StartDate>20211210</StartDate>
        <EndDate>20211211</EndDate>
    </time_Off_Event_group>
    

expect xml 信息应该是这样的。这可以做 xlst 吗?

    <time_Off_Event_group>
        <StartDate>20211206</StartDate>
        <EndDate>20211207</EndDate>
    </time_Off_Event_group>
    <time_Off_Event_group>
        <StartDate>20211209</StartDate>
        <EndDate>20211211</EndDate>
    </time_Off_Event_group>

【问题讨论】:

  • 您的描述“如果结束日期是另一个节点的开始日期,我需要删除每个节点的结束日期。”似乎与预期结果不符,因为不仅time_Off_Event_groupEndDate 已被删除,而且整个time_Off_Event_group 已被删除。而且,是的,当然,它可以在 XSLT 中完成,但您应该试一试并向我们展示该尝试以及您遇到的任何问题、您得到的错误或错误的结果。

标签: xml xslt xslt-2.0


【解决方案1】:

从您的示例来看,如果第一个节点的结束日期与第二个节点的开始日期相同,您实际上是在尝试合并相邻节点。据推测,一个组中可能有两个以上这样的节点。

如果这是一个正确的解释,我会使用

<xsl:for-each-group select="time_Off_Event_group"
  group-starting-with="*[not(StartDate = preceding-sibling::*[1]/EndDate)]">
  <time_Off_Event_group>
    <StartDate>
      <xsl:value-of select="current-group()[1]/StartDate"/>
    </StartDate>
    <EndDate>
      <xsl:value-of select="current-group()[last()]/EndDate"/>
    </EndDate>
  </time_Off_Event_group>
</xsl:for-each-group>
  

但是您没有非常清楚地指定您的要求,所以这可能是一个疯狂的猜测。

【讨论】:

  • 嗨迈克尔,你太棒了!是的,你的假设是我想要的。我太愚蠢了,我什至没有想到这里的 for-each 组函数。这就是为什么我被困在如何处理数据上。非常感谢您对此的回答。真的很有帮助。
  • 请点击(勾选|打勾)符号将答案标记为已接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-25
  • 2016-02-08
  • 1970-01-01
  • 2022-08-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多