2011-12-19 39 views
0

用一個簡單的XML這樣XSLT-1.0可以使用一個變量來訪問其他節點嗎?

<value> 
    <num> 
     <accession>111</accession> 
     <sequence>AAA</sequence> 
     <score>4000</score> 
    </num> 
</value> 

我想知道是否有可能從先前存儲在一個變量節點訪問特定的節點。該XSLT代碼是很短的,並解釋了更好的我想說

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 
    <xsl:template match="/value/num"> 
     <xsl:variable name="node"> 
      <xsl:copy-of select="current()"/> 
     </xsl:variable> 
     <root> 
      <xsl:copy-of select="$node"/> 
     </root> 
    </xsl:template> 
</xsl:stylesheet> 

所以我存儲在變量「節點」的節點是什麼。然後我可以用$node打印節點的內容。

(編輯)XML輸出

<root> 
    <num> 
     <accession>111</accession> 
     <sequence>AAA</sequence> 
     <score>4000</score> 
    </num> 
</root> 

我想要做的就是打印子節點的內容,這樣

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 
    <xsl:template match="/value/num"> 
     <xsl:variable name="node"> 
      <xsl:copy-of select="current()"/> 
     </xsl:variable> 
     <root> 
      <xsl:copy-of select="$node/accession"/> 
     </root> 
    </xsl:template> 
</xsl:stylesheet> 

但它給出了一個錯誤(組件返回失敗代碼:0x80600008 [nsIXSLTProcessor.transformToFragment])(檢查here

(編輯),我想的XML是

<root> 
    <accession>111</accession> 
</root> 

注意:問題不在於我怎麼能得到這個輸出。問題是如何使用提供的XSLT中的變量來獲取此輸出。

(編輯:已解決) 實際上,如果需要節點集,就可以在註釋中指定一個變量的值爲「select」屬性。如此以來,變量有樹片段,而不是存儲在它的(閱讀更多信息here

由於節點集此代碼是行不通的!

+0

你能提供一個樣本預期的輸出? – 2011-12-19 15:16:36

+0

已編輯的問題。請注意,我不僅要求這個特定的輸出,但我需要使用一個變量。 – Gerard 2011-12-19 15:22:43

回答

1

試試這個:

<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 
    <xsl:template match="/value"> 
     <root> 
      <xsl:for-each select="num"> 
       <xsl:variable name="node" select="current()" /> 
       <xsl:copy-of select="$node/accession" /> 
      </xsl:for-each> 
     </root> 
    </xsl:template> 
</xsl:transform> 

請注意,我用的xsl:變換而不是XSL:樣式表。另外,如果你有一個兼容的處理器,可以考慮使用版本2.0而不是1.0,它會增加很多有用的功能。

我還沒有看到你的一個變量需要,雖然。

+0

轉換和樣式表有什麼區別? [這裏](http://www.w3schools.com/xsl/el_stylesheet.asp)他們被認爲是同義詞。另外,我需要Firefox來處理文件,所以我現在還不能移動到XSLT2。 – Gerard 2011-12-19 16:08:52

+0

這個例子中的變量是無用的,但我需要它來存儲一個在choose元素中決定的特定節點。然後,用你的代碼,我可以看到問題出在哪裏。如果我使用'',那麼我沒有任何問題。如果我表達相同'的'然後我得到的錯誤。這是爲什麼? – Gerard 2011-12-19 16:11:40

+0

在變量元素中聲明的copy-of元素不會影響變量元素。你只是聲明一個變量而不分配任何東西給它。您必須使用select屬性爲其分配一個值。 copy-of元素將選定節點的值複製到輸出文檔中,而不是複製到變量中。 – 2011-12-19 16:15:08

相關問題