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"/>