在字符串 XSLT 2 中计算 parent 个元素和 return 个元素

Count the parent elements and return them in string XSLT 2

我想计算 parent 个元素和 return 个字符串格式的元素。我在下面提到了尝试过的代码。

输入:

<node>
    <dot>
        <title>paragaraph 12</title>
    </dot>
    <dot>
        <dot>
            <dot>
                <ttle>paragaraph 23</ttle>
            </dot>
        </dot>
    </dot>
    <dot>
        <dot>
            <title>paragaraph 24</title>
        </dot>
    </dot>
</node>

尝试过的代码:

<xsl:template match="title[parent::dot]">
    <xsl:value-of select="count(parent::dot)"/>
</xsl:template>

预期输出:

<output>
    <out type="One">paragaraph 12</out>
    <out type="Three">paragaraph 23</out>
    <out type="Two">paragaraph 24</out>
</output>

解释输出:

<out type="One">paragaraph 12</out> --> 这里有一个 <dot> 上面的标题。所以 @type 应该是 One

<out type="One">paragaraph 23</out> --> 这里有3个<dot>上面的title。所以 @type 应该是 Three

<out type="One">paragaraph 24</out> --> 这里有两个<dot>上面的title。所以 @type 应该是 Two

您要找的是 ancestor-axis:

  <xsl:template match="title[parent::dot]">
    <xsl:element name="out">
      <xsl:attribute name="type" select="count(ancestor::dot)"/>
      <xsl:value-of select="."/>
    </xsl:element>
  </xsl:template>

要将数字转换为单词,请查看此问题:

xsl:numberformat="Ww" 应该产生正确的输出:

  <xsl:template match="dot/title">
      <out>
          <xsl:attribute name="count">
              <xsl:number format="Ww" value="count(ancestor::dot)"/>
          </xsl:attribute>
          <xsl:apply-templates/>
      </out>
  </xsl:template>