2010-11-10 30 views
0

我有一個源XML文件,我需要將其解壓縮爲更加結構化的XML,以便稍後可以將其作爲數據集進行處理。
我已經嘗試了很多方法,通過應用模板和for-each命令,但總是顯得不足。需要使用XLST變換解壓縮XML

我需要澄清元素之間的關係。從最深的元素(BookingDetail元素)開始,如果它的元素等於BookingHeader元素的元素,它應該只是BookingHeader元素的子元素。然後上去鏈,如果兩個值相等,那麼BookingHeader元素將僅顯示爲ManifestBooking元素的子元素。最後,如果Manifest元素的兩個元素相等,則ManifestBooking元素只應作爲子元素顯示。

任何幫助將不勝感激。

源文件:


<?xml version="1.0" encoding="UTF-8"?> 
<ShipmentInformation xmlns="http://www.tranxml.org/TranXML/Version4.0" Transaction="Actual"> 
    <GeneralShipmentInformation> 
     <TransactionSetPurposeCode>00</TransactionSetPurposeCode> 
     <TransportationMethodTypeCode>L</TransportationMethodTypeCode> 
     <ShipmentMethodOfPayment>DE</ShipmentMethodOfPayment> 
     <ShipmentIdentificationNumber>918072</ShipmentIdentificationNumber> 
     <StandardCarrierAlphaCode>NUNCRR</StandardCarrierAlphaCode> 
    </GeneralShipmentInformation> 
    <Priority>0</Priority> 
    <DateTimeReference SegmentId="StartTime"> 
     <Date>2010-11-05</Date> 
     <Time>00:00:00</Time> 
    </DateTimeReference> 
    <Origin> 
     <GeographicLocation> 
      <LocationIdentifier>NUN</LocationIdentifier> 
     </GeographicLocation> 
    </Origin> 
    <Destination> 
     <GeographicLocation> 
      <LocationIdentifier>SSS BARGAIN BUILDERS SUPP P/L</LocationIdentifier> 
     </GeographicLocation> 
    </Destination> 
    <EquipmentDetailsLoop> 
     <EquipmentDetails> 
      <EquipmentStructure> 
       <Initial/> 
       <EquipmentNumber>Z48GW</EquipmentNumber> 
       <DescriptionCode>TV</DescriptionCode> 
      </EquipmentStructure> 
     </EquipmentDetails> 
    </EquipmentDetailsLoop> 
    <EquipmentDetailsLoop> 
     <EquipmentDetails> 
      <EquipmentStructure> 
       <Initial/> 
       <EquipmentNumber>B50KX</EquipmentNumber> 
       <DescriptionCode>TL</DescriptionCode> 
      </EquipmentStructure> 
     </EquipmentDetails> 
    </EquipmentDetailsLoop> 
    <EquipmentDetailsLoop> 
     <EquipmentDetails> 
      <EquipmentStructure> 
       <Initial/> 
       <EquipmentNumber>B60KX</EquipmentNumber> 
       <DescriptionCode>TL</DescriptionCode> 
      </EquipmentStructure> 
     </EquipmentDetails> 
    </EquipmentDetailsLoop> 
    <EquipmentDetailsLoop> 
     <EquipmentDetails> 
      <EquipmentStructure> 
       <Initial/> 
       <EquipmentNumber>B70KX</EquipmentNumber> 
       <DescriptionCode>TL</DescriptionCode> 
      </EquipmentStructure> 
     </EquipmentDetails> 
    </EquipmentDetailsLoop> 
    <EquipmentDetailsLoop> 
     <EquipmentDetails> 
      <EquipmentStructure> 
       <Initial/> 
       <EquipmentNumber>B80KX</EquipmentNumber> 
       <DescriptionCode>TL</DescriptionCode> 
      </EquipmentStructure> 
     </EquipmentDetails> 
    </EquipmentDetailsLoop> 
    <ManifestSourceBD xmlns:version4="http://www.tranxml.org/TranXML/Version4.0"> 
     <DSBookingDetail> 
      <SeqNo>1</SeqNo> 
      <LineType>Product</LineType> 
      <BookingNo>1</BookingNo> 
      <OrderNo>CAM/074082/040</OrderNo> 
      <SSCC>193168810020083905</SSCC> 
      <Description>RIDGE CAP ROLL TOP.42 X 390MM DEEP OCEAN</Description> 
      <UnitCode1>KG</UnitCode1> 
      <Quantity1>25</Quantity1> 
     </DSBookingDetail> 
     <DSBookingDetail> 
      <SeqNo>2</SeqNo> 
      <LineType>Product</LineType> 
      <BookingNo>1</BookingNo> 
      <OrderNo>CAM/074082/040</OrderNo> 
      <SSCC>193168810020083912</SSCC> 
      <Description>RIDGE CAP ROLL TOP.42 X 390MM DEEP OCEAN</Description> 
      <UnitCode1>KG</UnitCode1> 
      <Quantity1>25</Quantity1> 
     </DSBookingDetail> 
     <DSBookingDetail> 
      <SeqNo>3</SeqNo> 
      <LineType>Product</LineType> 
      <BookingNo>1</BookingNo> 
      <OrderNo>CAM/074082/040</OrderNo> 
      <SSCC>193168810020083929</SSCC> 
      <Description>RIDGE CAP ROLL TOP.42 X 390MM DEEP OCEAN</Description> 
      <UnitCode1>KG</UnitCode1> 
      <Quantity1>17</Quantity1> 
     </DSBookingDetail> 
     <DSBookingDetail> 
      <SeqNo>4</SeqNo> 
      <LineType>Product</LineType> 
      <BookingNo>1</BookingNo> 
      <OrderNo>CAM/074082/010</OrderNo> 
      <SSCC>193168810020115484</SSCC> 
      <Description>CUSTOM ORB.42 DEEP OCEAN</Description> 
      <UnitCode1>KG</UnitCode1> 
      <Quantity1>484</Quantity1> 
     </DSBookingDetail> 
     <DSBookingDetail> 
      <SeqNo>5</SeqNo> 
      <LineType>Product</LineType> 
      <BookingNo>3</BookingNo> 
      <OrderNo>CAM/074082/010</OrderNo> 
      <SSCC>193168810020115491</SSCC> 
      <Description>CUSTOM ORB.42 DEEP OCEAN</Description> 
      <UnitCode1>KG</UnitCode1> 
      <Quantity1>487</Quantity1> 
     </DSBookingDetail> 
     <DSBookingDetail> 
      <SeqNo>6</SeqNo> 
      <LineType>Product</LineType> 
      <BookingNo>1</BookingNo> 
      <OrderNo>CAM/074082/010</OrderNo> 
      <SSCC>193168810020115507</SSCC> 
      <Description>CUSTOM ORB.42 DEEP OCEAN</Description> 
      <UnitCode1>KG</UnitCode1> 
      <Quantity1>274</Quantity1> 
     </DSBookingDetail> 
     <DSBookingDetail> 
      <SeqNo>7</SeqNo> 
      <LineType>Product</LineType> 
      <BookingNo>1</BookingNo> 
      <OrderNo>CAM/074082/010</OrderNo> 
      <SSCC>193168810380969598</SSCC> 
      <Description>CUSTOM ORB.42 DEEP OCEAN</Description> 
      <UnitCode1>KG</UnitCode1> 
      <Quantity1>149</Quantity1> 
     </DSBookingDetail> 
     <DSBookingDetail> 
      <SeqNo>8</SeqNo> 
      <LineType>Product</LineType> 
      <BookingNo>1</BookingNo> 
      <OrderNo>CAM/074082/020</OrderNo> 
      <SSCC>193168810380969604</SSCC> 
      <Description>CUSTOM ORB.42 SANDBANK</Description> 
      <UnitCode1>KG</UnitCode1> 
      <Quantity1>312</Quantity1> 
     </DSBookingDetail> 
     <DSBookingDetail> 
      <SeqNo>9</SeqNo> 
      <LineType>Product</LineType> 
      <BookingNo>1</BookingNo> 
      <OrderNo>CAM/074082/030</OrderNo> 
      <SSCC>193168810380969611</SSCC> 
      <Description>VALLEY GUTTER.42 390MM DEEP OCEAN</Description> 
      <UnitCode1>KG</UnitCode1> 
      <Quantity1>11</Quantity1> 
     </DSBookingDetail> 
     <DSBookingDetail> 
      <SeqNo>10</SeqNo> 
      <LineType>Product</LineType> 
      <BookingNo>1</BookingNo> 
      <OrderNo>CAM/074082/040</OrderNo> 
      <SSCC>193168810380969628</SSCC> 
      <Description>RIDGE CAP ROLL TOP.42 X 390MM DEEP OCEAN</Description> 
      <UnitCode1>KG</UnitCode1> 
      <Quantity1>17</Quantity1> 
     </DSBookingDetail> 
     <DSBookingDetail> 
      <SeqNo>11</SeqNo> 
      <LineType>Product</LineType> 
      <BookingNo>2</BookingNo> 
      <OrderNo>NUN/017553/010</OrderNo> 
      <SSCC>193168810020081963</SSCC> 
      <Description>CUSTOM ORB.42 PAPERBARK</Description> 
      <UnitCode1>KG</UnitCode1> 
      <Quantity1>279</Quantity1> 
     </DSBookingDetail> 
     <DSBookingDetail> 
      <SeqNo>12</SeqNo> 
      <LineType>Product</LineType> 
      <BookingNo>2</BookingNo> 
      <OrderNo>NUN/017553/020</OrderNo> 
      <SSCC>193168810020081970</SSCC> 
      <Description>QUAD GUTTER HI 115 PAPERBARK (PLAIN)</Description> 
      <UnitCode1>KG</UnitCode1> 
      <Quantity1>6</Quantity1> 
     </DSBookingDetail> 
     <DSBookingDetail> 
      <SeqNo>13</SeqNo> 
      <LineType>Product</LineType> 
      <BookingNo>2</BookingNo> 
      <OrderNo>NUN/017553/070</OrderNo> 
      <SSCC>193168810020082021</SSCC> 
      <Description>UC UNIVERSAL CAP PAPERBARK</Description> 
      <UnitCode1>KG</UnitCode1> 
      <Quantity1>13</Quantity1> 
     </DSBookingDetail> 
     <DSBookingDetail> 
      <SeqNo>14</SeqNo> 
      <LineType>Product</LineType> 
      <BookingNo>2</BookingNo> 
      <OrderNo>CAM/074112/010</OrderNo> 
      <SSCC>193168810380973892</SSCC> 
      <Description>QUAD GUTTER HI 115 CLASSIC CREAM (PLAIN)</Description> 
      <UnitCode1>KG</UnitCode1> 
      <Quantity1>6</Quantity1> 
     </DSBookingDetail> 
     <DSBookingDetail> 
      <SeqNo>15</SeqNo> 
      <LineType>Product</LineType> 
      <BookingNo>3</BookingNo> 
      <OrderNo>CAM/074112/050</OrderNo> 
      <SSCC>193168810380973939</SSCC> 
      <Description>CUSTOM ORB.42 WOODLAND GREY</Description> 
      <UnitCode1>KG</UnitCode1> 
      <Quantity1>149</Quantity1> 
     </DSBookingDetail> 
     <DSBookingDetail> 
      <SeqNo>16</SeqNo> 
      <LineType>Product</LineType> 
      <BookingNo>2</BookingNo> 
      <OrderNo>CAM/074112/040</OrderNo> 
      <SSCC>193168810020118645</SSCC> 
      <Description>QUAD GUTTER HI 115 EXTERNAL BRACKET CLASSIC CREAM</Description> 
      <UnitCode1>KG</UnitCode1> 
      <Quantity1>1</Quantity1> 
     </DSBookingDetail> 
     <DSBookingDetail> 
      <SeqNo>17</SeqNo> 
      <LineType>Product</LineType> 
      <BookingNo>2</BookingNo> 
      <OrderNo>NUN/017553/060</OrderNo> 
      <SSCC>193168810020118669</SSCC> 
      <Description>POP ROUND 90MM ZINCALUME NOZZLE/DROP</Description> 
      <UnitCode1>KG</UnitCode1> 
      <Quantity1>1</Quantity1> 
     </DSBookingDetail> 
    </ManifestSourceBD> 
    <ManifestSourceBH xmlns:version4="http://www.tranxml.org/TranXML/Version4.0"> 
     <DSBookingHeader/> 
     <DSBookingHeader> 
      <BookingNo>2</BookingNo> 
      <SenderName>BlueScope Lysaght</SenderName> 
      <ReceiverName>REECE PTY LTD - CAMPBELLFIELD</ReceiverName> 
      <ReceiverAddress1>35 STATION    AV vicroads 639 S6</ReceiverAddress1> 
      <ReceiverAddress3>HEATHCOTE JUNCTION</ReceiverAddress3> 
      <ReceiverPostCode>3758</ReceiverPostCode> 
      <DespatchDate>2010-11-05</DespatchDate> 
      <DeliveryDate>2010-11-05</DeliveryDate> 
      <SenderReference>918072</SenderReference> 
      <DeliveryStartTime>00:00:00</DeliveryStartTime> 
     </DSBookingHeader> 
     <DSBookingHeader> 
      <BookingNo>1</BookingNo> 
      <SenderName>BlueScope Lysaght</SenderName> 
      <ReceiverName>SSS BARGAIN BUILDERS SUPP P/L</ReceiverName> 
      <ReceiverAddress1>83 HIGH     ST TO 85</ReceiverAddress1> 
      <ReceiverAddress3>BROADFORD</ReceiverAddress3> 
      <ReceiverPostCode>3658</ReceiverPostCode> 
      <DespatchDate>2010-11-05</DespatchDate> 
      <DeliveryDate>2010-11-05</DeliveryDate> 
      <SenderReference>918072</SenderReference> 
      <DeliveryStartTime>00:00:00</DeliveryStartTime> 
     </DSBookingHeader> 
     <DSBookingHeader> 
      <BookingNo>3</BookingNo> 
      <SenderName>BlueScope Lysaght</SenderName> 
      <ReceiverName>SSS BARGAIN BUILDERS SUPP P/L</ReceiverName> 
      <ReceiverAddress1>83 HIGH     ST TO 85</ReceiverAddress1> 
      <ReceiverAddress3>BROADFORD</ReceiverAddress3> 
      <ReceiverPostCode>3658</ReceiverPostCode> 
      <DespatchDate>2010-11-05</DespatchDate> 
      <DeliveryDate>2010-11-05</DeliveryDate> 
      <SenderReference>918072</SenderReference> 
      <DeliveryStartTime>00:00:00</DeliveryStartTime> 
     </DSBookingHeader> 
    </ManifestSourceBH> 
    <ManifestSourceM xmlns:version4="http://www.tranxml.org/TranXML/Version4.0"> 
     <DSManifest> 
      <ManifestNo>918072</ManifestNo> 
      <ManifestDate>2010-11-05</ManifestDate> 
      <PrimeMover>Z48GW</PrimeMover> 
      <Fleet1>B50KX</Fleet1> 
      <Fleet2>B60KX</Fleet2> 
      <Fleet3>B70KX</Fleet3> 
      <Fleet4>B80KX</Fleet4> 
      <Fleet5>B90KX</Fleet5> 
      <Description>""</Description> 
      <Description2>""</Description2> 
     </DSManifest> 
    </ManifestSourceM> 
    <ManifestSourceMB xmlns:version4="http://www.tranxml.org/TranXML/Version4.0"> 
     <DSManifestBooking/> 
     <DSManifestBooking> 
      <ManifestNo>918072</ManifestNo> 
      <BookingNo>3</BookingNo> 
      <SeqNo>1</SeqNo> 
      <SubBookingNo>1</SubBookingNo> 
      <Confirmed>"No"</Confirmed> 
      <Charge>"No"</Charge> 
      <SentToEDI>"No"</SentToEDI> 
     </DSManifestBooking> 
     <DSManifestBooking> 
      <ManifestNo>918072</ManifestNo> 
      <BookingNo>2</BookingNo> 
      <SeqNo>2</SeqNo> 
      <SubBookingNo>1</SubBookingNo> 
      <Confirmed>"No"</Confirmed> 
      <Charge>"No"</Charge> 
      <SentToEDI>"No"</SentToEDI> 
     </DSManifestBooking> 
     <DSManifestBooking> 
      <ManifestNo>918072</ManifestNo> 
      <BookingNo>1</BookingNo> 
      <SeqNo>1</SeqNo> 
      <SubBookingNo>1</SubBookingNo> 
      <Confirmed>"No"</Confirmed> 
      <Charge>"No"</Charge> 
      <SentToEDI>"No"</SentToEDI> 
     </DSManifestBooking> 
    </ManifestSourceMB> 
</ShipmentInformation> 

進入這個:


<?xml version="1.0" encoding="UTF-8"?> 
<ManifestSource xmlns:version4="http://www.tranxml.org/TranXML/Version4.0"> 
    <DSManifest> 
     <ManifestNo>918072</ManifestNo> 
     <ManifestDate>2010-11-05</ManifestDate> 
     <PrimeMover>Z48GW</PrimeMover> 
     <Description>""</Description> 
     <Description2>""</Description2> 
     <Fleet1>B50KX</Fleet1> 
     <Fleet2>B60KX</Fleet2> 
     <Fleet3>B70KX</Fleet3> 
     <Fleet4>B80KX</Fleet4> 
     <Fleet5>B90KX</Fleet5> 
     <DSManifestBooking> 
      <ManifestNo>918072</ManifestNo> 
      <BookingNo>1</BookingNo> 
      <SeqNo>1</SeqNo> 
      <Confirmed>"No"</Confirmed> 
      <Charge>"No"</Charge> 
      <SentToEDI>"No"</SentToEDI> 
       <DSBookingHeader> 
       <BookingNo>1</BookingNo> 
       <SenderName>BlueScope Lysaght</SenderName> 
       <ReceiverName>REECE PTY LTD - CAMPBELLFIELD</ReceiverName> 
       <ReceiverAddress1>35 STATION AV vicroads 639 S6</ReceiverAddress1> 
       <ReceiverAddress3>HEATHCOTE JUNCTION</ReceiverAddress3> 
       <ReceiverPostCode>3758</ReceiverPostCode> 
       <DespatchDate>2010-11-05</DespatchDate> 
       <DeliveryDate>2010-11-05</DeliveryDate> 
       <SenderReference>918072</SenderReference> 
       <DeliveryStartTime>00:00:00</DeliveryStartTime> 
       <DSBookingDetail> 
        <BookingNo>1</BookingNo> 
        <SeqNo>1</SeqNo> 
        <Description>RIDGE CAP ROLL TOP.42 X 390MM DEEP OCEAN</Description> 
        <Quantity1>25</Quantity1> 
        </DSBookingDetail> 
      </DSBookingHeader> 
      </DSManifestBooking> 
      <DSManifestBooking> 
      <ManifestNo>918072</ManifestNo> 
      <BookingNo>2</BookingNo> 
      <SeqNo>2</SeqNo> 
      <Confirmed>"No"</Confirmed> 
      <Charge>"No"</Charge> 
      <SentToEDI>"No"</SentToEDI> 
      <DSBookingHeader> 
       <BookingNo>2</BookingNo> 
       <SenderName>BlueScope Lysaght</SenderName> 
       <ReceiverName>SSS BARGAIN BUILDERS SUPP P/L</ReceiverName> 
       <ReceiverAddress1>83 HIGH ST TO 85</ReceiverAddress1> 
       <ReceiverAddress3>BROADFORD</ReceiverAddress3> 
       <ReceiverPostCode>3658</ReceiverPostCode> 
       <DespatchDate>2010-11-05</DespatchDate> 
       <DeliveryDate>2010-11-05</DeliveryDate> 
       <SenderReference>918072</SenderReference> 
       <DeliveryStartTime>00:00:00</DeliveryStartTime> 
       <DSBookingDetail> 
        <BookingNo>2</BookingNo> 
        <SeqNo>11</SeqNo> 
        <Description>CUSTOM ORB.42 PAPERBARK</Description> 
        <Quantity1>279</Quantity1> 
       </DSBookingDetail> 
      </DSBookingHeader> 
     </DSManifestBooking> 
    </DSManifest> 
</ManifestSource> 
+0

最大的問題:你僅限於XSLT 1.0嗎?這將對推薦的技術產生很大的影響。 – LarsH 2010-11-10 05:19:04

+3

在我們開始嘗試推斷源和期望輸出之間的對應關係之前,我們可以用一個小散文來描述期望的轉換是什麼?另外,發佈您嘗試過的XSLT以及結果會有所幫助。我懷疑答案是分組... – LarsH 2010-11-10 05:22:47

+0

不限於v1.0 XSLT。 – 2010-11-10 10:07:15

回答

1

這個樣式表:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:version4="http://www.tranxml.org/TranXML/Version4.0"> 
    <xsl:template match="*" name="copy"> 
     <xsl:element name="{local-name()}"> 
      <xsl:copy-of select="@*"/> 
      <xsl:apply-templates/> 
     </xsl:element> 
    </xsl:template> 
    <xsl:template match="version4:ShipmentInformation/* 
          [not(self::version4:ManifestSourceM)]"/> 
    <xsl:template match="version4:DSManifest/*[last()]"> 
     <xsl:call-template name="copy"/> 
     <xsl:apply-templates select="/*/version4:ManifestSourceMB/* 
             [version4:ManifestNo = 
             current()/../version4:ManifestNo]"/> 
    </xsl:template> 
    <xsl:template match="version4:DSManifestBooking/*[last()]"> 
     <xsl:call-template name="copy"/> 
     <xsl:apply-templates select="/*/version4:ManifestSourceBH/* 
             [version4:BookingNo = 
             current()/../version4:BookingNo]"/> 
    </xsl:template> 
    <xsl:template match="version4:DSBookingHeader/*[last()]"> 
     <xsl:call-template name="copy"/> 
     <xsl:apply-templates select="/*/version4:ManifestSourceBD/* 
             [version4:BookingNo = 
             current()/../version4:BookingNo]"/> 
    </xsl:template> 
    <xsl:template match="version4:ShipmentInformation"> 
     <xsl:apply-templates/> 
    </xsl:template> 
</xsl:stylesheet> 

輸出:

<ManifestSourceM> 
    <DSManifest> 
     <ManifestNo>918072</ManifestNo> 
     <ManifestDate>2010-11-05</ManifestDate> 
     <PrimeMover>Z48GW</PrimeMover> 
     <Fleet1>B50KX</Fleet1> 
     <Fleet2>B60KX</Fleet2> 
     <Fleet3>B70KX</Fleet3> 
     <Fleet4>B80KX</Fleet4> 
     <Description>""</Description> 
     <Description2>""</Description2> 
     <DSManifestBooking> 
      <ManifestNo>918072</ManifestNo> 
      <BookingNo>1</BookingNo> 
      <SeqNo>1</SeqNo> 
      <Confirmed>"No"</Confirmed> 
      <Charge>"No"</Charge> 
      <SentToEDI>"No"</SentToEDI> 
      <DSBookingHeader> 
       <BookingNo>1</BookingNo> 
       <SenderName>BlueScope Lysaght</SenderName> 
       <ReceiverName>REECE PTY LTD - CAMPBELLFIELD</ReceiverName> 
       <ReceiverAddress1>35 STATION AV vicroads 639 S6</ReceiverAddress1> 
       <ReceiverAddress3>HEATHCOTE JUNCTION</ReceiverAddress3> 
       <ReceiverPostCode>3758</ReceiverPostCode> 
       <DespatchDate>2010-11-05</DespatchDate> 
       <DeliveryDate>2010-11-05</DeliveryDate> 
       <SenderReference>918072</SenderReference> 
       <DeliveryStartTime>00:00:00</DeliveryStartTime> 
       <DSBookingDetail> 
        <BookingNo>1</BookingNo> 
        <SeqNo>1</SeqNo> 
        <Description>RIDGE CAP ROLL TOP.42 X 390MM DEEP OCEAN</Description> 
        <Quantity1>25</Quantity1> 
       </DSBookingDetail> 
      </DSBookingHeader> 
     </DSManifestBooking> 
     <DSManifestBooking> 
      <ManifestNo>918072</ManifestNo> 
      <BookingNo>2</BookingNo> 
      <SeqNo>2</SeqNo> 
      <Confirmed>"No"</Confirmed> 
      <Charge>"No"</Charge> 
      <SentToEDI>"No"</SentToEDI> 
      <DSBookingHeader> 
       <BookingNo>2</BookingNo> 
       <SenderName>BlueScope Lysaght</SenderName> 
       <ReceiverName>SSS BARGAIN BUILDERS SUPP P/L</ReceiverName> 
       <ReceiverAddress1>83 HIGH ST TO 85</ReceiverAddress1> 
       <ReceiverAddress3>BROADFORD</ReceiverAddress3> 
       <ReceiverPostCode>3658</ReceiverPostCode> 
       <DespatchDate>2010-11-05</DespatchDate> 
       <DeliveryDate>2010-11-05</DeliveryDate> 
       <SenderReference>918072</SenderReference> 
       <DeliveryStartTime>00:00:00</DeliveryStartTime> 
       <DSBookingDetail> 
        <BookingNo>2</BookingNo> 
        <SeqNo>11</SeqNo> 
        <Description>CUSTOM ORB.42 PAPERBARK</Description> 
        <Quantity1>279</Quantity1> 
       </DSBookingDetail> 
      </DSBookingHeader> 
     </DSManifestBooking> 
    </DSManifest> 
</ManifestSourceM> 

注意:您所需的輸出具有名稱空間聲明,但元素位於空名稱空間URI(如果需要,請澄清)。使用大型文檔的密鑰可以更高效地查找。它也可以用於清單(不只是用於書籍),以防萬一有一個以上。

編輯:刪除命名空間聲明。

編輯2:已添加清單綁定。

+0

非常感謝你,這正是我需要的結構。輸出上的名稱空間聲明不是必需的。 – 2010-11-10 21:07:19

+0

我測試了你對我完整源代碼的絕妙代碼,它完美地工作。它正確地對元素進行分組,我甚至對源碼中的元素進行了混洗,並且仍然將它們正確分組。 – 2010-11-10 21:31:53

+0

我被告知,每個源文件只會有一個DSManifestM,但我寧願迎合不止一個。我會發佈一個完整的源文件。 – 2010-11-10 21:34:14