我的XML中有以下几行。
<toc-item num="(i)">
<toc-item num="(ii)">
<toc-item num="(a)">
<toc-item num="(b)">
<toc-item num="1">
<toc-item num="2">
我需要一个xslt代码,如果数字是格式(i),则给出3,如果格式在(a)中,则为2,在最后一种情况下为1。我试过以下。但如果是(i)或(a),则给出2。
<xsl:variable name="nu">
<xsl:number format="(i)" level="any" />
</xsl:variable>
<xsl:variable name="Brac">
<xsl:choose>
<xsl:when test="contains(current()/@num,$nu)">
<xsl:value-of select="3"/>
</xsl:when>
<xsl:when test="contains(current()/@num,'(')">
<xsl:value-of select="2"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="1"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value of select="$Brac"/>
请让我知道我是如何得到它的。
由于
答案 0 :(得分:1)
输入XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<numbers>
<toc-item num="(i)"/>
<toc-item num="(ii)"/>
<toc-item num="(a)"/>
<toc-item num="(b)"/>
<toc-item num="1"/>
<toc-item num="2"/>
<toc-item num="(2.x)"/>
</numbers>
以下XSLT 2.0
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:template name="get_number_type">
<xsl:param name="number_string"/>
<xsl:analyze-string select="$number_string" regex="(^[0-9]+$)|(^\([a-h]\)$)|(^\([ivx]+\)$)">
<xsl:matching-substring>
<xsl:choose>
<xsl:when test="regex-group(1) != ''">
<xsl:text>1</xsl:text>
</xsl:when>
<xsl:when test="regex-group(2) != ''">
<xsl:text>2</xsl:text>
</xsl:when>
<xsl:when test="regex-group(3) != ''">
<xsl:text>3</xsl:text>
</xsl:when>
</xsl:choose>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:text>invalid</xsl:text>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
<xsl:template match="toc-item">
<xsl:text>The number format of string '</xsl:text>
<xsl:value-of select="@num"/>
<xsl:text>' is </xsl:text>
<xsl:call-template name="get_number_type">
<xsl:with-param name="number_string" select="@num"/>
</xsl:call-template>
<xsl:text>.</xsl:text>
</xsl:template>
</xsl:stylesheet>
生成文本输出
The number format of string '(i)' is 3.
The number format of string '(ii)' is 3.
The number format of string '(a)' is 2.
The number format of string '(b)' is 2.
The number format of string '1' is 1.
The number format of string '2' is 1.
The number format of string '(2.x)' is invalid.
注意:
<xsl:for-each>
,可用的数字格式作为XML子树输入。如果您对此感兴趣,请告诉我。