2

我想在 XForms 中使用 XPath 连接两个节点集值。

我知道 XPath 有一个 concat(string, string) 函数,但我将如何连接两个节点集值?

开始编辑: 我尝试了 concat 函数..我尝试了这个..以及它的变体以使其工作,但它没有

<xf:value ref="concat(instance('param_choices')/choice/root, .)"/>

结束编辑

下面是我想要实现的简化代码示例。

XForms 模型:

<xf:instance id="param_choices" xmlns="">
    <choices>
        <root label="Param Choices">/param</root>
        <choice label="Name">/@AAA</choice>
        <choice label="Value">/@BBB</choice>
    </choices>
</xf:instance>

我目前拥有的 XForms ui 代码:

<xf:select ref="instance('criteria_data')/criteria/criterion" appearance="full">
    <xf:label>Param choices:</xf:label>    
    <br/>
    <xf:itemset nodeset="instance('param_choices')/choice">
        <xf:label ref="@label"></xf:label>
        <xf:value ref="."></xf:value>
    </xf:itemset>
</xf:select>    

(如果用户选择“名称”复选框..)XML 输出是:

<criterion>/@BBB</criterion>

然而!我想将根节点集值与当前选择节点集值结合起来。

本质上:

<xf:value ref="concat(instance('param_choices')/choice/root, .)"/>

或者

<xf:value ref="(instance('definition_choices')/choice/root) + ."/>

实现以下 XML 输出:

<criterion>/param/@BBB</criterion>

关于如何做到这一点的任何建议?(我对 XPath 和 XForms 还很陌生)

ps 我输入的内容对我来说很有意义,但是如果您无法弄清楚我在问什么,请告诉我..

谢谢!

4

3 回答 3

1

XPath 表达式的求值不能修改 XML 文档的结构/内容——它只选择(一组)现有节点

为了生成 XML 文档中不存在的节点,必须使用与 XPath 结合使用的其他方式(例如 XSLT)。

于 2010-06-09T19:40:50.927 回答
1

XForms 还不支持动态 XPath 表达式构造。Javascript 没有像 eval() 这样的函数。

作为一个非常有限的解决方法,您可以使用诸如

/*[name() = substring-after(instance('param_choices')/root,'/')]/@*[name() = substring-after(.,'/@')]

于 2010-06-10T04:13:54.323 回答
1

问题是您使用的是ref属性而不是元素value上的属性。该属性用于将元素绑定到单个节点,而该属性用于使用已解析 XPath 表达式中的值。valuerefvalue

您的 XPath 表达式本身也有一个小错误,因此如果您将value元素更改为:

<xf:value value="concat(instance('param_choices')/root, .)" />

...您应该会发现它可以正常工作。

于 2010-06-09T22:25:18.287 回答