2017-02-15 7 views
0

以下のXMLでは、のに基づいて、attrGroupMany name = "allergenRelatedInformation"をソートする必要があります。そして、残りのXMLは、このセグメントだけをソートしてそのまま生成する必要があります。特定のXMLノードを並べ替える

FDA 8

BIG だから、 "FDA" とallergenSpecificationNameを持っているすべてのallergenSpecificationAgencyは "BIG 8は" "FDA" と "TREE_NUTS" の前に来る必要がありました。 XSLTでこれを達成する方法を提案してください。ありがとう。

<ns:MT_TradeItemsExport xmlns:ns="test"> 
<Header version="2.1"> 
    <CreationDateTime>2017-02-09T14:19:03.566Z</CreationDateTime> 
    <MessageID>0072745000010_9f9cd85e-6d30-4152-a51f-d8491df45486</MessageID> 
</Header> 
<Payload> 
    <ItemRegistration> 
     <attr name="numberOfServingsPerPackage">4.0</attr> 
    </ItemRegistration> 
    <attrGroupMany name="organicClaim"> 
     <row> 
      <attr name="organicTradeItemCode">2</attr> 
      <attrMany name="organicClaimAgencyCode"> 
       <value>6</value> 
      </attrMany> 
     </row> 
    </attrGroupMany> 

    <attrGroupMany name="allergenRelatedInformation"> 
     <row> 
      <attr name="allergenSpecificationAgency">FDA</attr> 
      <attr name="allergenSpecificationName">BIG 8</attr> 
      <attrGroupMany name="allergen"> 
       <row> 
        <attr name="allergenTypeCode">AC</attr> 
        <attr name="levelOfContainmentCode">FREE_FROM</attr> 
       </row> 
      </attrGroupMany> 
     </row> 
     <row> 
      <attr name="allergenSpecificationAgency">FDA</attr> 
      <attr name="allergenSpecificationName">BIG 8</attr> 
      <attrGroupMany name="allergen"> 
       <row> 
        <attr name="allergenTypeCode">AE</attr> 
        <attr name="levelOfContainmentCode">FREE_FROM</attr> 
       </row> 
      </attrGroupMany> 
     </row> 
     <row> 
      <attr name="allergenSpecificationAgency">FDA</attr> 
      <attr name="allergenSpecificationName">BIG 8</attr> 
      <attrGroupMany name="allergen"> 
       <row> 
        <attr name="allergenTypeCode">AF</attr> 
        <attr name="levelOfContainmentCode">FREE_FROM</attr> 
       </row> 
      </attrGroupMany> 
     </row> 
     <row> 
      <attr name="allergenSpecificationAgency">FDA</attr> 
      <attr name="allergenSpecificationName">BIG 8</attr> 
      <attrGroupMany name="allergen"> 
       <row> 
        <attr name="allergenTypeCode">AM</attr> 
        <attr name="levelOfContainmentCode">FREE_FROM</attr> 
       </row> 
      </attrGroupMany> 
     </row> 
     <row> 
      <attr name="allergenSpecificationAgency">FDA</attr> 
      <attr name="allergenSpecificationName">BIG 8</attr> 
      <attrGroupMany name="allergen"> 
       <row> 
        <attr name="allergenTypeCode">AN</attr> 
        <attr name="levelOfContainmentCode">FREE_FROM</attr> 
       </row> 
      </attrGroupMany> 
     </row> 
     <row> 
      <attr name="allergenSpecificationAgency">FDA</attr> 
      <attr name="allergenSpecificationName">BIG 8</attr> 
      <attrGroupMany name="allergen"> 
       <row> 
        <attr name="allergenTypeCode">AP</attr> 
        <attr name="levelOfContainmentCode">FREE_FROM</attr> 
       </row> 
      </attrGroupMany> 
     </row> 
     <row> 
      <attr name="allergenSpecificationAgency">FDA</attr> 
      <attr name="allergenSpecificationName">BIG 8</attr> 
      <attrGroupMany name="allergen"> 
       <row> 
        <attr name="allergenTypeCode">AY</attr> 
        <attr name="levelOfContainmentCode">FREE_FROM</attr> 
       </row> 
      </attrGroupMany> 
     </row> 
     <row> 
      <attr name="allergenSpecificationAgency">FDA</attr> 
      <attr name="allergenSpecificationName">TREE_NUTS</attr> 
      <attrGroupMany name="allergen"> 
       <row> 
        <attr name="allergenTypeCode">TN</attr> 
        <attr name="levelOfContainmentCode">FREE_FROM</attr> 
       </row> 
      </attrGroupMany> 
     </row> 
     <row> 
      <attr name="allergenSpecificationAgency">FDA</attr> 
      <attr name="allergenSpecificationName">BIG 8</attr> 
      <attrGroupMany name="allergen"> 
       <row> 
        <attr name="allergenTypeCode">UW</attr> 
        <attr name="levelOfContainmentCode">FREE_FROM</attr> 
       </row> 
      </attrGroupMany> 
     </row> 
    </attrGroupMany> 
</Payload> 

+0

を使用ソートする、xsl:sortと一緒xsl:perform-sortまたはxsl:apply-templatesを使用することができますか?何を試しましたか? 'xsl:apply-templates/xsl:sort'を使うのは簡単です。 –

答えて

1

あなたは `row`子要素をソートしたいかrow子供が

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 


    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="attrGroupMany[@name ='allergenRelatedInformation']"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*"/> 
      <xsl:apply-templates select="row"> 
       <xsl:sort select="attr[@name = 'allergenSpecificationAgency']"/> 
       <xsl:sort select="attr[@name = 'allergenSpecificationName']"/> 
      </xsl:apply-templates> 
     </xsl:copy> 
    </xsl:template> 
</xsl:transform> 

http://xsltransform.net/ejivdHR

+0

ありがとう、マーティン。あなたは私の命を救いました!! – user3092856

関連する問題