XSLT- 在模板中使用全局变量

XSLT- using global variable in template

我确定一定有明显的地方我做错了。 (Altova XMLSpy 2012 专业 sp1)

我已经声明并想使用一个全局变量:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" exclude-result-prefixes="xs fn">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="no" doctype-system="myDTD.dtd" />

    <!-- Edit these parameters if necessary. -->
    <xsl:param name="outObject" select="POSIT"/>

    <xsl:template match="section">
        <xsl:element name="section">
                <!-- debug -->
            <xsl:element name="para">Debug: outObject = <xsl:value-of select="$outObject"/></xsl:element>
        </xsl:element>
    </xsl:template>


</xsl:stylesheet>

这会产生以下输出:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE section SYSTEM "myDTD.dtd">
<section>
    <title/>
    <para>Debug: outObject = </para>
</section>

我本以为我可以在这里访问$outObject 的值。我误会了什么?

您的参数未填充。您在任何模板之外定义它,因此在任何现有上下文之外。没有进一步的上下文,路径 POSIT 什么都不选择。你应该使用类似的东西:

<xsl:param name="outObject" select="/root/path/to/POSIT"/>

这是假设 POSIT 是您的 XML 输入中的一个元素,您想要获取其值 - 而不是 string "POSIT"需要引用:

<xsl:param name="outObject" select="`POSIT`"/>

也许你犯了和我一样的错误总是

如果要使用字符串"POSIT",则必须使用单引号:

<xsl:param name="outObject" select="'POSIT'"/>