2015-08-24 90 views
0

我有一些XML,我正在使用XSLT轉換以構建鏈接。首先,我的模板在具有特定屬性的節點上進行匹配,並存儲可以正常工作的該屬性的值。然後,我需要找到一個id屬性與我剛存儲的值相匹配的節點。但是,當我嘗試選擇節點並提取id屬性進行比較時,它將選擇我要定位的節點的所有子節點,即使我指定僅需要id屬性。我如何只選擇id屬性?xslt僅指定屬性時選擇所有子節點

XML

<div>   
      <bibl id="label2212" n="M"> 
       <date n="created">194</date> 
       <title level="m">test title 1</title> 

       <kw type="subject">Ⓑ ...</kw><!-- EXTRA --> 
       <kw type="subject">Ⓔ ...</kw><!-- EXTRA --> 
       <kw type="subject">Ⓖ Indonesia &lt; Southeast Asia &lt; Asia</kw><!-- EXTRA --> 

       <note type="comment">Linked reference: ABIA 13, 1938/658 
        <xref n="label658">label658</xref> 
       </note> 
      </bibl> 
      <bibl id="label658" n="M"> 
       <date n="created">194</date> 
       <title level="m">test title 2</title> 

       <kw type="subject">Ⓑ ...</kw><!-- EXTRA --> 
       <kw type="subject">Ⓔ ...</kw><!-- EXTRA --> 
       <kw type="subject">Ⓖ Indonesia &lt; Southeast Asia &lt; Asia</kw><!-- EXTRA --> 
      </bibl> 

XSLT

<xsl:template match="note[@type = 'comment' ]/xref[@n]"> 
     <xsl:variable name="n-xref"><xsl:value-of select="@n"/></xsl:variable> 

     <xsl:variable name="test"><xsl:value-of select="../../../bibl[@id]"/></xsl:variable> 
     <a> 
      <xsl:attribute name="href" select="$test"></xsl:attribute> 
     </a> 

     </xsl:for-each>--> 
     <xsl:apply-templates/> 
    </xsl:template>enter code here 

當運行變量測試包含bibl節點 的所有子節點我都甚至試圖選擇=」 ../../../ bibl [@ id = $ n-xref]「,它也不起作用

+0

你的問題不清楚。請發佈您的示例的預期結果。 - 提示:使用**鍵**作爲交叉引用。 –

回答

0

表達式bibl[@id]選擇所有具有@id屬性的子元素bibl。在你的示例中,所有bibl元素都有一個@id屬性,所以你可以全部選中它們。我猜你試圖選擇一個@id屬性與$ n-xref的值匹配的那個。那將是bibl[@id=$n-xref]。你說你嘗試過這樣做並沒有奏效;再試一次,如果它仍然不起作用,請告訴我們你做了什麼。

仔細一看,我懷疑你的下一個問題是代碼<xsl:attribute name="href" select="$test"/>$test的值是一個bibl元素,而您想要它的@id屬性。正如所寫,您的屬性將被設置爲bibl元素的字符串值,即空格。

順便說一下,爲了清晰和高性能,您的代碼<xsl:variable name="n-xref"><xsl:value-of select="@n"/></xsl:variable>應該寫爲<xsl:variable name="n-xref" select="@n"/>

相關問題