如何在XML文档中的所有此类元素中获取元素的位置/索引
例如,下面给出了XML:
<root>
<fac></fac>
<pac>
<sec>a</sec>
<sec>b</sec>
</pac>
<pac>
<sec>c</sec>
<sec>d</sec>
</pac>
<sec>e</sec>
</root>
在处理<pac>
节点时,例如使用<xsl:for-each select="pac">
,我需要在整个XML文档中获取<sec>
节点的位置(无论级别如何)。所以,我希望获得每个<sec>
的位置索引,如下所示:
<sec>a</sec> -> 1
<sec>b</sec> -> 2
<sec>c</sec> -> 3
<sec>d</sec> -> 4
<sec>e</sec> -> 5
使用position()
函数,它返回相对于当前父级的位置。
答案 0 :(得分:1)
您可以使用xsl:number level="any"
例如
<xsl:template match="sec">
<xsl:copy>
<xsl:attribute name="pos">
<xsl:number level="any"/>
</xsl:attribute>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
答案 1 :(得分:0)
您可以改为使用android:paddingLeft="40dp"
<Button
android:id="@+id/goToPersonalPage"
android:layout_width="145dp"
android:layout_height="50dp"
android:paddingLeft="40dp"
android:layout_marginLeft="20dp"
android:background="@drawable/button_oval"
android:text="@string/memberButton"
android:textColor="#29395e"
android:textSize="18dp" />
:
count()
将样式表与输入XML一起使用时:
<xsl:value-of select="count(.|preceding::sec)"/>
它显示:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output omit-xml-declaration="no" method="xml" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:strip-space elements="*"/>
<xsl:output indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="sec">
<xsl:copy-of select="."/>
<xsl:value-of select="concat('[', count(.|preceding::sec), ']')"/>
</xsl:template>
</xsl:stylesheet>