我有这个xml文件
<netcdf xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2" location="file:/dev/null" iosp="lasp.tss.iosp.ValueGeneratorIOSP" start="0" increment="1">
<attribute name="title" value="Vector time series"/>
<dimension name="time" length="100"/>
<variable name="time" shape="time" type="double">
<attribute name="units" type="String" value="seconds since 1970-01-01T00:00"/>
</variable>
<group name="Vector" tsdsType="Structure" shape="time">
<variable name="x" shape="time" type="double"/>
<variable name="y" shape="time" type="double"/>
<variable name="z" shape="time" type="double"/>
</group>
</netcdf>
我需要xslt文件,它提供像这样的输出
1.time
2.Vector
这是两个标签的名称属性:变量和组。目前我有这样的代码
<xsl:for-each select="document($path)//*[local-name()='variable']">
<xsl:if test="string-length( @*[local-name()='name'] ) >1">
<li>
<xsl:value-of select="position()"/>
<xsl:value-of select="@*[local-name()='name']"/>
</li>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="document($path)//*[local-name()='group']">
<li>
<xsl:value-of select="position()"/>
<xsl:value-of select="@*[local-name()='name']"/>
</li>
</xsl:for-each>
它会给我
1.time
1.Vector
那么我如何通过这个position()函数达到我的目标,或者在XSLT中还有其他更好的方法吗?非常感谢提前。
答案 0 :(得分:1)
您可以使用position()
但它应该在同一个重复指令中使用。使用前缀say x
声明名称空间并使用:
<xsl:for-each select="document($path)//x:netcdf/*
[self::x:variable or self::x:group]"/>
此外,我会使用xsl:number
之类的:
<xsl:number value="position()" format="1."/>
还要考虑在样式表中声明默认命名空间,以便摆脱local-name()
测试。