XSLT(1.0):比较属性值后的子字符串失败
也许我忽略了一些非常明显的事情,但现在我真的不知所措。我试图通过比较节点的属性XSLT(1.0):比较属性值后的子字符串失败,xslt,Xslt,也许我忽略了一些非常明显的事情,但现在我真的不知所措。我试图通过比较节点的属性@ID与调用子字符串之前的的结果来获取节点。虽然这样做失败了,但手动输入字符串会给出正确的结果,我真的很困惑问题出在哪里。 没有空格干扰,substring-before()的结果正是我想要的 我在文件mets.xml中有以下代码片段: <mets:file ID="edoc_ed000227_fg_kuttenberger_religionsfriede" MIMETYPE="text/xml">
@ID
与调用子字符串之前的的结果来获取节点。虽然这样做失败了,但手动输入字符串会给出正确的结果,我真的很困惑问题出在哪里。
没有空格干扰,substring-before()
的结果正是我想要的
我在文件mets.xml
中有以下代码片段:
<mets:file ID="edoc_ed000227_fg_kuttenberger_religionsfriede" MIMETYPE="text/xml">
<mets:FLocat LOCTYPE="URL" xlink:href="quellentexte/kuttenberger_religionsfriede.xml"/>
</mets:file>
因此,substring-before()
正确返回edoc_ed000227_fg_kuttenberger_religionsfriede
,但使用函数调用检索目标值失败,即使在按字面意思使用字符串时正确找到了节点
谢谢你的帮助和提示 问题在于之前在子字符串中使用的表达式,对于target
变量,将位于“mets”文件的上下文中。也就是说,它将在mets文件中查找tei:tei
,而不是在当前文档中
因为您已经将子字符串before值存储在变量中;“test”,您可以在表达式中使用它
<xsl:variable name="target" select="document($metsfile)//mets:file[@ID=$test]/mets:FLocat/@xlink:href"/>
headdesk天哪,我应该亲眼看到。。。我通常不会对我只需要一次的东西使用变量–
current()/祖先::tei:tei/@xml:id
如果没有变量就可以了。谢谢
<xsl:template match="tei:p[@xml:id]">
<xsl:variable name="test" select="substring-before(/tei:TEI/@xml:id, '_dt')"/>
<xsl:variable name="target" select="document($metsfile)//mets:file[@ID=substring-before(/tei:TEI/@xml:id, '_dt')]/mets:FLocat/@xlink:href"/>
<xsl:variable name="target2" select="document($metsfile)//mets:file[@ID='edoc_ed000227_fg_kuttenberger_religionsfriede']/mets:FLocat/@xlink:href"/>
[<xsl:value-of select="$test"/>]
[<xsl:value-of select="$target"/>]
[<xsl:value-of select="$target2"/>]
</xsl:template>
[edoc_ed000227_fg_kuttenberger_religionsfriede]
[]
[quellentexte/kuttenberger_religionsfriede.xml]
<xsl:variable name="target" select="document($metsfile)//mets:file[@ID=$test]/mets:FLocat/@xlink:href"/>