2

我根据http://www.w3.org/MarkUp/Forms/wiki/XForms_2.0#The_var_element准备了以下 XForms 文档:

<?xml-stylesheet type="text/xsl" href="../xsltforms/xsltforms.xsl"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms">
    <head>
        <title>var-demo</title>
        <xf:model>
            <xf:instance>
                <data xmlns="">
                    <PersonGivenName>Kilroy</PersonGivenName>
                </data>
            </xf:instance>
        </xf:model>
    </head>
    <body>
        <xf:output value="PersonGivenName"><xf:label>PersonGivenName=</xf:label></xf:output>

        <xf:var name="pg_name" value="PersonGivenName"/>
        <xf:output value="pg_name"><xf:label>pg_name=</xf:label></xf:output>
    </body>
</html>

这很简单:应该输出(我认为)两次 Kilroy,首先直接从模型中读取,然后放入一个变量并打印该变量。

但输出只是

PersonGivenName=Kilroy
pg_name=

我已经从 eXist-db 2.0 和 eXide 2.0 版尝试过这个。上面的代码是由 XSLTforms 处理的;省略第一行,它由 betterForm 处理 - 但结果是一样的。

http://www.w3.org/MarkUp/Forms/wiki/XForms_2.0中的“3.2.4.2 变量范围”一章之后的示例表明,在使用变量的值时需要一个 $ 前缀,但两个 XSLTforms在将最后一个输出更改为 value="$pg_name" 时,betterForm 会抛出异常。上面的代码在语法上似乎是正确的,但是变量的值并没有打印出来。有人可以解释一下吗?

4

2 回答 2

2

抱歉,XSLTForms 中尚未实现变量。

我经常为“变量”定义一个专用实例。

-阿兰

于 2013-07-18T19:26:15.003 回答
1

它们也不是更好的形式。您可以使用 Alain 描述的模式或使用我们在规范中出现之前实现的自定义简单变量机制:

我们得到了一个<xf:setvariable name="foo" value="bar"/>实现。然后可以在某些地方将生成的变量与“$”符号一起使用,或者(更节省)使用bf:appContext('foo')XPath 函数。

  • 乔恩
于 2013-07-25T11:07:08.800 回答