2015-06-20 246 views
0

對於XSLT來說非常新穎,並且在轉換XML時需要一些幫助。以下XML可以有多個「行」標籤XSLT通過重複節點將節點中的值複製到另一節點

<?xml version="1.0" encoding="UTF-8"?> 
    <ns1:row> 
     <ns1:City>BALTIMORE</ns1:City> 
     <ns1:Miscdata> 
      <ns1:Building> 
       <ns1:VendorCode>123</ns1:VendorCode> 
       <ns1:Value>2</ns1:Value> 
      </ns1:Building> 
      <ns1:Building> 
       <ns1:VendorCode>345</ns1:VendorCode> 
       <ns1:Value>8</ns1:Value> 
      </ns1:Building> 
     </ns1:Miscdata> 
</ns1:row> 

    <ns1:row> 
      <ns1:City>FREMONT</ns1:City> 
      <ns1:Miscdata> 
       <ns1:Building> 
        <ns1:VendorCode>332</ns1:VendorCode> 
        <ns1:Value>4</ns1:Value> 
       </ns1:Building> 
       <ns1:Building> 
        <ns1:VendorCode>342</ns1:VendorCode> 
        <ns1:Value>14</ns1:Value> 
       </ns1:Building> 
       <ns1:Building> 
        <ns1:VendorCode>323</ns1:VendorCode> 
        <ns1:Value>233</ns1:Value> 
       </ns1:Building> 
      </ns1:Miscdata> 
    </ns1:row> 

上述XML中「VendorCode」標籤中的值需要複製到「Value」標籤。輸出XML是

<?xml version="1.0" encoding="UTF-8"?> 
<ns1:row> 
     <ns1:City>BALTIMORE</ns1:City> 
     <ns1:Miscdata> 
      <ns1:Building> 
       <ns1:VendorCode>123</ns1:VendorCode> 
       <ns1:Value>123</ns1:Value> 
      </ns1:Building> 
      <ns1:Building> 
       <ns1:VendorCode>345</ns1:VendorCode> 
       <ns1:Value>345</ns1:Value> 
      </ns1:Building> 
     </ns1:Miscdata> 
</ns1:row> 
<ns1:row> 
     <ns1:City>FREMONT</ns1:City> 
     <ns1:Miscdata> 
      <ns1:Building> 
       <ns1:VendorCode>332</ns1:VendorCode> 
       <ns1:Value>332</ns1:Value> 
      </ns1:Building> 
      <ns1:Building> 
       <ns1:VendorCode>342</ns1:VendorCode> 
       <ns1:Value>342</ns1:Value> 
      </ns1:Building> 
      <ns1:Building> 
       <ns1:VendorCode>323</ns1:VendorCode> 
       <ns1:Value>323</ns1:Value> 
      </ns1:Building> 
     </ns1:Miscdata> 
</ns1:row> 

回答

0

所有這些任務使用模板

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

爲出發點,那麼你對於例如需要特殊處理節點添加模板在你的情況下

<xsl:template match="ns1:Building/ns1:Value"> 
    <xsl:copy> 
    <xsl:value-of select="preceding-sibling::ns1:VendorCode"/> 
    </xsl:copy> 
</xsl:template> 
+0

非常感謝你馬丁。有效! –

相關問題