我是新来的。如何为我的变量名称检索值“blob”:“FLOP”?
提前致谢
XML:
<ROOT><XML><Oxo Txt="blob"></Oxo></XML></ROOT>
公式:
<xsl:template match="/">
<xsl:variable name="FLOP">
<xsl:value-of select="*//Oxo/@Txt"></xsl:value-of>
</xsl:variable>
</xsl:template>
其实我一无所获......
答案 0 :(得分:0)
目前尚不清楚你正在尝试做什么。 XSL变量仅存储值。您当前的模板仅创建变量并存储给定XPath表达式指向的值。
如果您尝试输出您的值,则需要添加一行:
<xsl:template match="/">
<xsl:variable name="FLOP">
<xsl:value-of select="*//Oxo/@Txt"></xsl:value-of>
</xsl:variable>
<!-- You need to output the value if you want to actually see it: -->
<xsl:value-of select="$FLOP"/>
</xsl:template>
当我针对您的示例输入XML尝试上述模板时,我得到以下输出:
<?xml version="1.0" encoding="UTF-8"?>blob
您可以稍微清理一下XPath表达式。
*//Oxo/@Txt
这分解如下:
* ⇒ any input node
//Oxo ⇒ any "Oxo" descendant of that node
/@Txt ⇒ the "Txt" attribute of "Oxo"
由于这是在仅与根元素匹配的模板中,*
与该根匹配。 //
部分可能很昂贵,因为它必须评估后代节点的所有。由于我们从逻辑根开始,这意味着整个文件中的每个元素。您的示例XML很小,所以我们没有注意到这里有任何实际影响 - 但如果您的输入文件很大,那么事情可能会陷入困境。
如果您已经知道所需的Oxo
元素的确切位置,那么只需为XPath写一下:
/ROOT/XML/Oxo/@Txt
您还可以收紧变量XSL。
<xsl:variable name="FLOP">
<xsl:value-of select="*//Oxo/@Txt"></xsl:value-of>
</xsl:variable>
xsl:variable
元素允许自己的select
语句。我们可以将这个变量表达式缩短为一行,在我们更具体的XPath中填充它们:
<xsl:variable name="FLOP" select="/ROOT/XML/Oxo/@Txt"/>