从XML中的特定标记在XSL中创建全局变量

时间:2012-12-12 14:31:19

标签: xml xslt xslt-1.0

我在XSL 1.0样式表中创建全局变量时遇到了麻烦。我想从我正在尝试转换的XML中的XML标记的值创建变量。这是我的XML的样子:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<config name="test report" xmlns="http://www.example.com/CONFIG">

    <the_one_i_want>1000</the_one_i_want>

    <!-- lots of other stuff -->

</config>

这就是我的XSL的样子:

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:CONFIG="http://www.example.com/CONFIG">

    <xsl:output method="html"/>

    <xsl:variable name="normal_global_variable">100</xsl:variable><!-- This works fine -->
    <xsl:variable name="variable_from_xml"><xsl:value-of select="/config/the_one_i_want/value"/></xsl:variable><!-- This does not work -->

    <!-- lots of other stuff -->

</xsl:stylesheet>

所以我希望variable_from_xml的值为1000,但事实并非如此。我做错了什么?

P.S。名为the_one_i_want的XML标记是唯一的,只在我的XML中出现一次。

1 个答案:

答案 0 :(得分:3)

问题是命名空间之一。您所追踪的<the_one_i_want>元素绑定到http://www.example.com/CONFIG命名空间(您已在XSLT中定义)。

因此,只需更改此内容:

<xsl:variable name="variable_from_xml">
  <xsl:value-of select="/config/the_one_i_want/value"/>
</xsl:variable>

到此:

<xsl:variable name="variable_from_xml" select="/CONFIG:config/CONFIG:the_one_i_want"/>

或者更简单:

<xsl:variable name="variable_from_xml" select="/*/CONFIG:the_one_i_want"/>