2013-09-16 49 views
0

我有下面的XML文件:XSLT轉換來獲得屬性值

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<DatDtl xmlns="http://ups.com/ttg/cache/country"> 
<CnyDtl> 
<Cny TslLguCd="001" CnyCd="00" Cny2Cd="DNA" Cny3Cd="000" CnyNa="Data Not Available" CnyOflNa="Data Not Available" RecEffSttDt="2010-12-31" RecEffEndDt="2099-12-31" RecUdtTs="2012-07-27 15:35:08.352773"/> 
<Cny TslLguCd="001" CnyCd="96" Cny2Cd="OTH" Cny3Cd="996" CnyNa="Other" CnyOflNa="Other" RecEffSttDt="2010-12-31" RecEffEndDt="2099-12-31" RecUdtTs="2012-07-27 15:35:14.291605"/> 
</CnyDtl> 
</DatDtl> 

我想將它轉換成一個CSV文件與屬性只針對CnyCd和CnyNa值。我有下面的XSLT提取這兩個值:

< 

?xml version="1.0" encoding="ISO-8859-1"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
     <xsl:template match="/"> 
     <xsl:for-each select="CnyDtl/Cny"> 
     <xsl:value-of select="@CnyNa"/> 
<xsl:value-of select="@CnyCd"/> 
     </xsl:for-each> 
     </xsl:template> 
    </xsl:stylesheet> 

但我總是得到錯誤。什麼是正確的XSLT轉換呢?

+0

你好,你一定要配合「DatDtl」首先將每個換之前,你可以「 CnyDtl /人民幣」。最好的regarsd,彼得 – Peter

+0

不要告訴我們你沒有告訴我們你得到什麼錯誤而得到錯誤。他們可能對你沒有意義,但他們可能對回答你的問題的人有意義。 –

回答

0

首先在你的樣式表中,你忘記了提到根元素<DatDtl>。另外不要忘記在樣式表中聲明名稱空間。

如果使用下面的XSLT 1.0樣式:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:mypref="http://ups.com/ttg/cache/country"> 
    <xsl:output method="text" /> 

    <xsl:variable name="FS"> <!-- Field seperator --> 
     <xsl:text>;</xsl:text> 
    </xsl:variable> 
    <xsl:variable name="LT"> <!-- Line terminator --> 
     <xsl:text>&#13;</xsl:text> 
    </xsl:variable> 

    <xsl:template match="/mypref:DatDtl"> 
     <xsl:for-each select="mypref:CnyDtl/mypref:Cny"> 
      <xsl:value-of select="@CnyNa"/> 
      <xsl:value-of select=" $FS" /> 
      <xsl:value-of select="@CnyCd"/> 
      <xsl:value-of select="$LT" /> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

它會給下面的輸出:

Data Not Available;00 
Other;96