我是新来的。如何为我的变量名称检索" 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>
实际上我什么都没有...
基础
目前尚不清楚您要做什么。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"/>