2016-01-28 48 views
1

也許我忽略了一些真正明顯的東西,但此刻我真的很茫然。我試圖通過比較它的屬性@ID與調用substring-before的結果來獲得節點。雖然這樣做失敗了,但手動輸入字符串會給出正確的結果,而且我真的很困惑問題在哪裏。 沒有空格干擾,並且substring-before()的結果正是我想要的結果。XSLT(1.0):比較子字符串後屬性值失敗

我已經在一個文件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> 

的文件,而我申請的轉型有這個基本輪廓:

<TEI xmlns="http://www.tei-c.org/ns/1.0" 
    xml:id="edoc_ed000227_fg_kuttenberger_religionsfriede_dt"> 
    [...] 
    <p xml:id="p001">[...]</p> 
</TEI> 

我現在應用下面的轉換:

<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] 

所以,substring-before()但使用函數調用來檢索,即使使用字面字符串時的節點發現正確的目標值無法正確返回edoc_ed000227_fg_kuttenberger_religionsfriede

感謝您的任何幫助或提示!

回答

1

問題是您在substring-before之前爲target變量使用的表達式將位於「mets」文件的上下文中。也就是說,它將在mets文件中查找tei:TEI,而不是在當前文檔中查找。

由於您已將substring-before值存儲在變量中, 「測試」,你可以在表達式中使用它。

<xsl:variable name="target" select="document($metsfile)//mets:file[@ID=$test]/mets:FLocat/@xlink:href"/> 
+1

* headdesk *好傷心,我應該已經看到了我自己...... 我通常不使用的東西變量我只需要一次 - '電流()/祖先::地:TEI/@ XML :id'本來就是沒有變量的方式。謝謝! – dariok