我有以下XML文件:
<?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>
我想将其转换为只包含CnyCd和CnyNa属性值的CSV文件。我编写了以下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 :(得分: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> </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