如何从特定节点XSL获取可变值

  • 本文关键字:获取 XSL 节点 xml xslt
  • 更新时间 :
  • 英文 :


我是新来的。如何为我的变量名称检索" 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"/>

最新更新