【问题标题】:XSLT How to append one child element if another child element is repeating如果另一个子元素重复,XSLT 如何附加一个子元素
【发布时间】:2020-06-14 09:15:41
【问题描述】:

我有一个 XML,其中有两个子元素,如果第一个子元素重复,我想附加第二个子元素。 下面是请求 XML

<SelectedOffer>                     
<SelectedOfferItem>
    <OfferItemRefID>SP2F-58379439-103-1_ADT</OfferItemRefID>
    <PaxRefID>PAX1</PaxRefID>   
</SelectedOfferItem>
<SelectedOfferItem>
    <OfferItemRefID>SP2F-58379439-103-1_ADT</OfferItemRefID>
    <PaxRefID>PAX2</PaxRefID>
</SelectedOfferItem>
<SelectedOfferItem>
    <OfferItemRefID>SP2F-58379439-103-1_CHD</OfferItemRefID>
    <PaxRefID>PAX3 </PaxRefID>
</SelectedOfferItem>
<SelectedOfferItem>
    <OfferItemRefID>SP2F-58379439-103-1_CHD</OfferItemRefID>
    <PaxRefID>PAX4</PaxRefID>
</SelectedOfferItem>
<SelectedOfferItem>
    <OfferItemRefID>SP2F-58379439-103-1_INF</OfferItemRefID>
    <PaxRefID>PAX5</PaxRefID>
</SelectedOfferItem>                        

预期的结果会是这样的

<OfferItems>
<OfferItem OfferItemID="SP2F-58379439-103-1_ADT">
    <PassengerRefs>PAX1 PAX2</PassengerRefs>
</OfferItem>
<OfferItem OfferItemID="SP2F-58379439-103-1_CHD">
    <PassengerRefs>PAX3 PAX4</PassengerRefs>
</OfferItem>
<OfferItem OfferItemID="SP2F-58379439-103-1_INF">
    <PassengerRefs>PAX5</PassengerRefs>
</OfferItem>

【问题讨论】:

  • 这是一个分组问题。搜索一下——这可能是这里最常被问到的 XSLT 问题。请注意,XSLT 1.0 或 2.0 的答案是不同的。
  • 感谢您的建议,我现在可以看到一些类似的问题。 stackoverflow.com/questions/12374327/…

标签: xml xslt


【解决方案1】:

在 XSLT 2.0 中它很简单

<xsl:for-each-group select="SelectedOfferItem" group-adjacent="OfferItemRefID">
  <OfferItem OfferItemId="{current-grouping-key()}">
    <PassengerRefs>
      <xsl:value-of select="current-group()/PaxRefID"/>
    </PassengerRefs>
  </OfferItem>
</xsl:for-each-group>

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 2017-09-15
  • 1970-01-01
相关资源
最近更新 更多