我想将xml文件转换为csv(上面的结构)并计算低节点数,我尝试使用
<xsl:value-of select="position()"/>
和数字,但我总是得到1231212我想得到的是1234567
<root>
<row>
<low id="1d" name="bio">FNO</low>
<low id="1d" name="bbn">NBN</low>
<low id="1d" name="afs">CAA</low>
</row>
<row>
<low id="1a" name="adn">VHH</low>
<low id="1d" name="bio">ADN</low>
</row>
<row>
<low id="1r" name="rio">BOA</low>
<low id="1f" name="flo">KGG</low>
</row>
</root>
有人可以帮忙吗?谢谢
所需的输出:
row low id name
row1 low1 1d bio
row1 low2 1c bbn
row1 low3 1d afs
row2 low4 1a adn
....
使用了xsl
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/root">
<xsl:apply-templates select="row/low"/>
</xsl:template>
<xsl:template match="low">
<xsl:value-of select="concat(position(),',',.,'
')"/>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
尝试使用xsl:number
示例...
XML输入
<root>
<row>
<low>FNO</low>
<low>NBN</low>
<low>CAA</low>
</row>
<row>
<low>VHH</low>
<low>ADN</low>
</row>
<row>
<low>BOA</low>
<low>KGG</low>
</row>
</root>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="low">
<xsl:number level="any"/>
<xsl:value-of select="concat(',',.,'
')"/>
</xsl:template>
</xsl:stylesheet>
<强>输出强>
1,FNO
2,NBN
3,CAA
4,VHH
5,ADN
6,BOA
7,KGG
或者,如果您更改正在处理的节点集,position()
将起作用。在下面的示例中,正在处理的唯一节点是low
,因此position()
可以工作(产生与上面相同的输出)....
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/root">
<xsl:apply-templates select="row/low"/>
</xsl:template>
<xsl:template match="low">
<xsl:value-of select="concat(position(),',',.,'
')"/>
</xsl:template>
</xsl:stylesheet>
如果您在输出位置之前必须对low
进行排序等操作,这将派上用场。 (您只需将<xsl:sort/>
添加到xsl:apply-templates
。)
修改强>
这是使用更新的输入和所需输出的另一个示例。此输出与所需输出略有不同,因为它以逗号分隔。用您想要的任何分隔符替换逗号。
XML输入
<root>
<row>
<low id="1d" name="bio">FNO</low>
<low id="1d" name="bbn">NBN</low>
<low id="1d" name="afs">CAA</low>
</row>
<row>
<low id="1a" name="adn">VHH</low>
<low id="1d" name="bio">ADN</low>
</row>
<row>
<low id="1r" name="rio">BOA</low>
<low id="1f" name="flo">KGG</low>
</row>
</root>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/root">
<xsl:text>row,low,id,name
</xsl:text>
<xsl:apply-templates select="row/low"/>
</xsl:template>
<xsl:template match="low">
<xsl:text>row</xsl:text>
<xsl:number count="row"/>
<xsl:value-of select="concat(',low',position(),',',@id,',',@name,'
')"/>
</xsl:template>
</xsl:stylesheet>
<强>输出强>
row,low,id,name
row1,low1,1d,bio
row1,low2,1d,bbn
row1,low3,1d,afs
row2,low4,1a,adn
row2,low5,1d,bio
row3,low6,1r,rio
row3,low7,1f,flo