【问题标题】:How to remove duplicates from xml using xsl [duplicate]如何使用 xsl 从 xml 中删除重复项 [重复]
【发布时间】:2011-05-03 07:39:54
【问题描述】:

可能重复:
How to remove duplicate XML nodes using XSLT

我有一个以下格式的输入。我想从中删除重复的元素

<pasabm:TransactionProductVO>
   <pasabm:ItemNumber>100-0711-1</pasabm:ItemNumber>
   <pasabm:ItemSource>EBIZ_01</pasabm:ItemSource>
   <pasabm:ItemUom>Ea</pasabm:ItemUom>
   <pasabm:LotNumber>043111-13</pasabm:LotNumber>
   <pasabm:LotSource>EBIZ_01</pasabm:LotSource>
   <pasabm:LotLocation>M1</pasabm:LotLocation>
   <pasabm:ExpirationDate/>
   <pasabm:TransactionSerialAssocVO>
      <pasabm:ItemSerialNumber>3173041321</pasabm:ItemSerialNumber>
      <pasabm:SerialType>USN-1</pasabm:SerialType>
      <pasabm:SerialIdentification>100-0711-1</pasabm:SerialIdentification>
      <pasabm:ParentSerialIdentification>918993-30413301-0413-23-1</pasabm:ParentSerialIdentification>
      <pasabm:ShippedItemFlag>0</pasabm:ShippedItemFlag>
     </pasabm:TransactionSerialAssocVO>
     <pasabm:TransactionSerialAssocVO>
         <pasabm:ItemSerialNumber>3173041322</pasabm:ItemSerialNumber>
     <pasabm:SerialType>USN-1</pasabm:SerialType>
     <pasabm:SerialIdentification/>
     <pasabm:ParentSerialIdentification>918993-30413301-0413-23-1</pasabm:ParentSerialIdentification>
     <pasabm:ShippedItemFlag>0</pasabm:ShippedItemFlag>
       </pasabm:TransactionSerialAssocVO>
       <pasabm:TransactionSerialAssocVO>
          <pasabm:ItemSerialNumber>3173041323</pasabm:ItemSerialNumber>
      <pasabm:SerialType>USN-1</pasabm:SerialType>
      <pasabm:SerialIdentification/>
      <pasabm:ParentSerialIdentification>918993-30413301-0413-23-1</pasabm:ParentSerialIdentification>
      <pasabm:ShippedItemFlag>0</pasabm:ShippedItemFlag>
    </pasabm:TransactionSerialAssocVO>
</pasabm:TransactionProductVO>
<pasabm:TransactionProductVO>
   <pasabm:ItemNumber>100-0711-1</pasabm:ItemNumber>
   <pasabm:ItemSource>EBIZ_01</pasabm:ItemSource>
   <pasabm:ItemUom>Ea</pasabm:ItemUom>
   <pasabm:LotNumber>043111-13</pasabm:LotNumber>
   <pasabm:LotSource>EBIZ_01</pasabm:LotSource>
   <pasabm:LotLocation>M1</pasabm:LotLocation>
   <pasabm:ExpirationDate/>
     <pasabm:TransactionSerialAssocVO>
         <pasabm:ItemSerialNumber>3173041322</pasabm:ItemSerialNumber>
     <pasabm:SerialType>USN-1</pasabm:SerialType>
     <pasabm:SerialIdentification/>
     <pasabm:ParentSerialIdentification>918993-30413301-0413-23-1</pasabm:ParentSerialIdentification>
     <pasabm:ShippedItemFlag>0</pasabm:ShippedItemFlag>
     </pasabm:TransactionSerialAssocVO>
     <pasabm:TransactionSerialAssocVO>
          <pasabm:ItemSerialNumber>3173041321</pasabm:ItemSerialNumber>
          <pasabm:SerialType>USN-1</pasabm:SerialType>
          <pasabm:SerialIdentification>100-0711-1</pasabm:SerialIdentification>
          <pasabm:ParentSerialIdentification>918993-30413301-0413-23-1</pasabm:ParentSerialIdentification>
          <pasabm:ShippedItemFlag>0</pasabm:ShippedItemFlag>
     </pasabm:TransactionSerialAssocVO>
      <pasabm:TransactionSerialAssocVO>
          <pasabm:ItemSerialNumber>3173041323</pasabm:ItemSerialNumber>
      <pasabm:SerialType>USN-1</pasabm:SerialType>
      <pasabm:SerialIdentification/>
      <pasabm:ParentSerialIdentification>918993-30413301-0413-23-1</pasabm:ParentSerialIdentification>
      <pasabm:ShippedItemFlag>0</pasabm:ShippedItemFlag>
      </pasabm:TransactionSerialAssocVO>
</pasabm:TransactionProductVO>
<pasabm:TransactionProductVO>
   <pasabm:ItemNumber>100-0711-1</pasabm:ItemNumber>
   <pasabm:ItemSource>EBIZ_01</pasabm:ItemSource>
   <pasabm:ItemUom>Ea</pasabm:ItemUom>
   <pasabm:LotNumber>043111-13</pasabm:LotNumber>
   <pasabm:LotSource>EBIZ_01</pasabm:LotSource>
   <pasabm:LotLocation>M1</pasabm:LotLocation>
   <pasabm:ExpirationDate/>
     <pasabm:TransactionSerialAssocVO>
         <pasabm:ItemSerialNumber>3173041323</pasabm:ItemSerialNumber>
     <pasabm:SerialType>USN-1</pasabm:SerialType>
     <pasabm:SerialIdentification/>
     <pasabm:ParentSerialIdentification>918993-30413301-0413-23-1</pasabm:ParentSerialIdentification>
     <pasabm:ShippedItemFlag>0</pasabm:ShippedItemFlag>
     </pasabm:TransactionSerialAssocVO>
     <pasabm:TransactionSerialAssocVO>
          <pasabm:ItemSerialNumber>3173041322</pasabm:ItemSerialNumber>
          <pasabm:SerialType>USN-1</pasabm:SerialType>
          <pasabm:SerialIdentification>100-0711-1</pasabm:SerialIdentification>
          <pasabm:ParentSerialIdentification>918993-30413301-0413-23-1</pasabm:ParentSerialIdentification>
          <pasabm:ShippedItemFlag>0</pasabm:ShippedItemFlag>
     </pasabm:TransactionSerialAssocVO>
      <pasabm:TransactionSerialAssocVO>
          <pasabm:ItemSerialNumber>3173041321</pasabm:ItemSerialNumber>
      <pasabm:SerialType>USN-1</pasabm:SerialType>
      <pasabm:SerialIdentification/>
      <pasabm:ParentSerialIdentification>918993-30413301-0413-23-1</pasabm:ParentSerialIdentification>
      <pasabm:ShippedItemFlag>0</pasabm:ShippedItemFlag>
      </pasabm:TransactionSerialAssocVO>
</pasabm:TransactionProductVO>

我期望的输出是:

<pasabm:TransactionProductVO>
   <pasabm:ItemNumber>100-0711-1</pasabm:ItemNumber>
   <pasabm:ItemSource>EBIZ_01</pasabm:ItemSource>
   <pasabm:ItemUom>Ea</pasabm:ItemUom>
   <pasabm:LotNumber>043111-13</pasabm:LotNumber>
   <pasabm:LotSource>EBIZ_01</pasabm:LotSource>
   <pasabm:LotLocation>M1</pasabm:LotLocation>
   <pasabm:ExpirationDate/>
   <pasabm:TransactionSerialAssocVO>
      <pasabm:ItemSerialNumber>3173041321</pasabm:ItemSerialNumber>
      <pasabm:SerialType>USN-1</pasabm:SerialType>
      <pasabm:SerialIdentification>100-0711-1</pasabm:SerialIdentification>
      <pasabm:ParentSerialIdentification>918993-30413301-0413-23-1</pasabm:ParentSerialIdentification>
      <pasabm:ShippedItemFlag>0</pasabm:ShippedItemFlag>
     </pasabm:TransactionSerialAssocVO>
     <pasabm:TransactionSerialAssocVO>
         <pasabm:ItemSerialNumber>3173041322</pasabm:ItemSerialNumber>
     <pasabm:SerialType>USN-1</pasabm:SerialType>
     <pasabm:SerialIdentification/>
     <pasabm:ParentSerialIdentification>918993-30413301-0413-23-1</pasabm:ParentSerialIdentification>
     <pasabm:ShippedItemFlag>0</pasabm:ShippedItemFlag>
       </pasabm:TransactionSerialAssocVO>
       <pasabm:TransactionSerialAssocVO>
          <pasabm:ItemSerialNumber>3173041323</pasabm:ItemSerialNumber>
      <pasabm:SerialType>USN-1</pasabm:SerialType>
      <pasabm:SerialIdentification/>
      <pasabm:ParentSerialIdentification>918993-30413301-0413-23-1</pasabm:ParentSerialIdentification>
      <pasabm:ShippedItemFlag>0</pasabm:ShippedItemFlag>
    </pasabm:TransactionSerialAssocVO>
</pasabm:TransactionProductVO>

【问题讨论】:

  • XSLT 是一种 XML 转换语言。您的输入看起来不像 XML。也许另一种语言更适合您的目的。
  • 假设您的输入确实是 XML(可能标签丢失是因为您没有将数据标记为代码),答案很大程度上取决于您是否能够使用 XSLT 2.0 或者您是否能够使用坚持使用 XSLT 1.0。

标签: xslt


【解决方案1】:

在 XSLT 1.0 中使用 the Muenchian method for grouping

在 XSLT 2.0 中使用 &lt;xsl:for-each-group&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多