In the template below I'm trying to grab some information from an existing XML document and to re-write that same document with the addition of some specific ids.
这是xml的片段:
<item id='ta-' type='articulus'>
<fileName filestem='ta-'>ta-.xml</fileName>
<title>Super Sent., lib. 1 d. 1 q. 3 a. 1 tit.</title>
<questionTitle>Utrum utendum sit omnibus aliis a Deo</questionTitle>
</item>
在下面的模板中,正则表达式效果很好。但是尝试重建并失败。 Saxon告诉我'XPTY0019:'/'的第一个操作数的必需项类型是node();提供的值具有项类型xs:string'。我不确定这意味着什么。但我认为,在“analyze-string”元素之后,我不再在树中的正确节点上成功执行“value-of”选项。(请参阅下面的模板)。感谢您的帮助。
<xsl:template match="item">
<xsl:analyze-string select="./title" regex="([0-9]+)[^0-9]+([0-9]+)[^0-9]+([0-9]+)[^0-9]+([0-9]+)">
<xsl:matching-substring>
<xsl:variable name="fs"><xsl:value-of select="concat('ta-l', regex-group(1) ,'d', regex-group(2) ,'q', regex-group(3),'a',regex-group(4))"></xsl:value-of></xsl:variable>
<item xml:id="{$fs}">
<fileName filestem='{$fs}'><xsl:value-of select="concat($fs, '.xml')"/></fileName>
<title><xsl:value-of select="./title"/></title>
<questionTitle><xsl:value-of select="./questionTitle"/></questionTitle>
</item>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:template>
答案 0 :(得分:2)
您需要将上下文节点存储在analyze-string
之外
<xsl:variable name="item" select="."/>
然后在analyze-string里面你可以使用
<title><xsl:value-of select="$item/title"/></title>
<questionTitle><xsl:value-of select="$item/questionTitle"/></questionTitle>