Variables XSLT-1.0是否可以使用变量访问其他节点?

Variables XSLT-1.0是否可以使用变量访问其他节点?,variables,expression,nodes,xslt-1.0,Variables,Expression,Nodes,Xslt 1.0,使用这样一个简单的XML <value> <num> <accession>111</accession> <sequence>AAA</sequence> <score>4000</score> </num> </value> <xsl:stylesheet version="1.0" xmlns:xsl

使用这样一个简单的XML

<value>
    <num>
        <accession>111</accession>
        <sequence>AAA</sequence>
        <score>4000</score>
    </num>
</value>
<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>
我要做的是打印子节点的内容,如下所示

<value>
    <num>
        <accession>111</accession>
        <sequence>AAA</sequence>
        <score>4000</score>
    </num>
</value>
<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])(检查)

(编辑)我想要的XML是

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

)

谢谢

试试这个:

<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:transform而不是xsl:stylesheet。此外,考虑使用版本2而不是1,如果你有一个兼容的处理器,它会增加很多有用的特性。
不过,我仍然不认为您需要变量。

您能提供一个预期输出的示例吗?问题已编辑。请注意,我不仅要求这个特定的输出,还需要使用一个变量。转换和样式表之间的区别是什么?据说它们是同义词。另外,我需要Firefox来处理文件,所以我还不能移动到XSLT2。这个变量在本例中是无用的,但我需要它来存储choose元素中决定的特定节点。然后,通过您的代码,我可以看到问题出在哪里。如果我将
表示为它,则没有问题。如果我的表达式与
相同,那么我会得到错误。这是为什么?您在变量元素中声明的元素副本对变量元素没有任何影响。您只是声明了一个变量,没有给它赋值。必须使用“选择”属性为其赋值。元素的副本将所选节点的值复制到输出文档,而不是变量。我明白了,那么除了使用select属性之外,没有其他方法将值分配到变量?在任何情况下,原来的问题就解决了,我会更新指向这个的问题。谢谢(我可以看到,使用select属性存储一个节点集元素,而不使用它则选择一个树片段。这就是问题的根源)