列表编号问题我正在摔跤。有时列表有一个特定的起始编号,有时它不会。这里有一些xml
<document>
<OrderedList Style="LowerAlpha">
<Li><Para>Level 1, item 1</Para></Li>
<Li><Para>Level 1, item 2</Para>
<OrderedList Style="LowerRoman" StartAt="3">
<Li><Para>Level 2, item 1</Para></Li>
<Li><Para>Level 2, item 2</Para></Li>
</OrderedList>
</Li>
</OrderedList>
</document>
我希望我的输出是
一个。清单1 湾清单1 III。清单2 IV。清单2
当我没有使用以下xslt的起始编号时,我能够完美编号
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<root>
<xsl:apply-templates/>
</root>
</xsl:template>
<xsl:template match="OrderedList">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Li">
<Para>
<xsl:variable name="liCount" select="count(preceding-sibling::Li)+1"/>
<xsl:choose>
<xsl:when test="../@Style='LowerAlpha'">
<xsl:number format="a." value="$liCount"/>
</xsl:when>
<xsl:when test="../@Style='UpperAlpha'">
<xsl:number format="A." value="$liCount"/>
</xsl:when>
<xsl:when test="../@Style='LowerRoman'">
<xsl:number format="i." value="$liCount"/>
</xsl:when>
<xsl:when test="../@Style='UpperRoman'">
<xsl:number format="I." value="$liCount"/>
</xsl:when>
<xsl:otherwise>
<xsl:number format="1." value="$liCount"/>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates/>
</Para>
</xsl:template>
</xsl:stylesheet>
我已尝试在编号中添加StartAt的属性值,这在实际定义StartAt时有效,但在未定义StartAt时输出为NaN。
<xsl:variable name="liCount" select="count(preceding-sibling::Li)+number(../@StartAt)"/>
我需要使变量select语句以是否存在StartAt属性为条件,不确定是否可行。
感谢您的任何建议。
答案 0 :(得分:0)
你可以这样对待它。
<xsl:variable name="liCount">
<xsl:choose>
<xsl:when test="number(../@StartAt)">
<xsl:value-of select="count(preceding-sibling::Li) + number(../@StartAt)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="count(preceding-sibling::Li)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
我经常遇到这个问题,我写了一个名为“force-number()”的函数并将其添加到我的XSLT实用程序include中。如果您有EXSLT功能支持,则可能需要考虑此选项。