2011-12-19 37 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

相关问题