从模板中获取父/祖先号码

时间:2014-05-12 11:45:57

标签: xslt

我有以下的XML。

<?xml version="1.0" encoding="UTF-8"?>
<toc-part>
<title><content-style font-style="bold">CHAPTER 1</content-style></title>
<toc-div>
<title><content-style font-style="bold">A</content-style></title>
<toc-item>
<toc-title>Aas v Benham [1891] 2 Ch 244</toc-title>
<toc-pg>160</toc-pg>
</toc-item>
<toc-item>
<toc-title>Aas v Benham [1891] 2 Ch 256</toc-title>
<toc-pg>157</toc-pg>
</toc-item>
</toc-div>
</toc-part>

以及XSLT以下。

    <xsl:template match="toc-pg">
        <td class="toc-page">
              <xsl:apply-templates mode="x"/>
        </td>
    </xsl:template>

<xsl:template match="text()" mode="x">
        <xsl:analyze-string select="." regex="([0-9]+)">
          <xsl:matching-substring>
         <xsl:variable name="prent">
                                    <xsl:value-of select="substring-after(ancestor::toc-part/toc-subtitle,' ')"/>
                                </xsl:variable>
                                <xsl:variable name="cha">
                                    <xsl:value-of select="$prent"/>
                                </xsl:variable>     <a href="{$prent}">
        <xsl:value-of select="regex-group(1)"/>
        </a>

          </xsl:matching-substring>
          <xsl:non-matching-substring>

          <xsl:analyze-string select="."  regex="http://[^ ]+">
          <xsl:matching-substring>
         <a href="{.}">
                            <xsl:value-of select="."/>
                                    </a>

          </xsl:matching-substring>
          <xsl:non-matching-substring>

            <xsl:value-of select="."/>
          </xsl:non-matching-substring>
        </xsl:analyze-string>
          </xsl:non-matching-substring>
        </xsl:analyze-string>
  </xsl:template>

这里我试图将章节号码设为href,但这里却给我一个错误。错误如下。

XSLT 2.0 Debugging Error: Error: LRSC_TOC_02.xslt:88: Not a node item - item has type xs:string with value '160' -   Details: -     XPTY0020: The context item in an axis step must be a node

请让我知道如何避免此错误并检索章节编号。

由于

1 个答案:

答案 0 :(得分:0)

<xsl:matching-substring>内部,上下文项是匹配的子字符串本身,因此您希望从analyze-string之外的上下文节点导航树,然后您需要将其保存在变量中模板的开头:

<xsl:variable name="dot" select="."/>

然后使用

<xsl:value-of select="substring-after($dot/ancestor::toc-part/toc-subtitle,' ')"/>

(或者只是在substring-after(ancestor::toc-part/toc-subtitle, ' ')analyze-string并将 保存在变量中