我有以下的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
请让我知道如何避免此错误并检索章节编号。
由于
答案 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
并将 保存在变量中