Variables XSLT-1.0是否可以使用变量访问其他节点?
使用这样一个简单的XMLVariables 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
<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属性存储一个节点集元素,而不使用它则选择一个树片段。这就是问题的根源)