在XForms中向实例元素添加属性

时间:2014-12-18 20:15:04

标签: xforms

我有一个如下所示的实例:

<root>
    <switch ID="1">
        <foo/>
        <bar/>
    </switch>
    <switch ID="2">
        <foo/>
        <bar/>
    </switch>
</root>

我尝试创建一个向switch元素添加enabled属性的触发器。我一直在使用类似下面的内容向交换机添加新的子节点,但据我所知,同样的方法不能仅添加属性。此触发器位于xf:repeat块中,并且在&#34; bar&#34;已为特定开关添加了元素:

<xf:trigger ref=".[not(bar)]">
    <xf:label>Add "bar" Element</xf:label>
    <xf:insert ev:event="DOMActivate" context="../switch[index('switch-repeat')]" 
        nodeset="foo" at="foo" position="after" 
        origin="instance('presets')/bar"/>
</xf:trigger>

我一直在考虑将switch元素的内容复制到另一个带有enabled属性的实例中,比如<switch enabled="true/>,然后用原来的替换原来的,但这似乎有点迂回任务,我可能必须做同样的事情来保留ID属性。

2 个答案:

答案 0 :(得分:0)

XForms 1.1不允许创建元素或属性,只是从其他地方复制它。

XForms 2.0可以。实现可能已经有了自己的扩展。

答案 1 :(得分:0)

在Alain的评论的指导下,我在XForms标准中找到了this mention,用于将属性列表复制到元素中。这正是我希望的方式。

我用来添加属性的代码如下:

<xf:trigger ref=".[not(@enabled)]">
    <xf:label>Add "enabled" attribute</xf:label>
    <xf:insert ev:event="DOMActivate" context="../switch[index('switch-repeat')]"
        origin="instance('presets')/switch/@enabled"/>
</xf:trigger>

其中instance('presets')/switch<switch enabled="true"/>