如何向所有子节点插入属性
请在下面找到我的 xform 页面。
<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"
xmlns:exforms="http://www.exforms.org/exf/1-0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xhtml:head>
<xforms:instance id="instanceData">
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<fruits>
<fruit>
<fruit-name>Mango</fruit-name>
</fruit>
<fruit>
<fruit-name>Apple</fruit-name>
</fruit>
<fruit>
<fruit-name>Banana</fruit-name>
</fruit>
</fruits>
</form>
</xforms:instance>
</xhtml:head>
</xhtml:html>
我想将属性taste=“good”插入到所有水果名称标签中,如下所示
<fruit-name taste="good">
我尝试了以下方法来实现相同的目的,但它总是仅将属性插入到第一个水果名称。
<xforms:insert ev:event="xforms-model-construct-done"
context="instance('instanceData')/fruits/fruit/fruit-name"
origin="xxforms:attribute('taste','good')" />
<xforms:insert ev:event="xforms-model-construct-done"
context="instance('instanceData')/fruits/fruit[position() > 0]/fruit-name"
origin="xxforms:attribute('taste','good')" />
请建议一种在拍摄时将此属性插入到所有水果名称节点的方法。 由于水果列表是动态的,我们需要有一个动态的解决方案。
Please find below my xform page.
<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"
xmlns:exforms="http://www.exforms.org/exf/1-0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xhtml:head>
<xforms:instance id="instanceData">
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<fruits>
<fruit>
<fruit-name>Mango</fruit-name>
</fruit>
<fruit>
<fruit-name>Apple</fruit-name>
</fruit>
<fruit>
<fruit-name>Banana</fruit-name>
</fruit>
</fruits>
</form>
</xforms:instance>
</xhtml:head>
</xhtml:html>
I would like to insert a attribute taste="good" to all fruit-name tags as below
<fruit-name taste="good">
I tried the following ways to achieve the same but it always inserts the attribute to first fruit-name only.
<xforms:insert ev:event="xforms-model-construct-done"
context="instance('instanceData')/fruits/fruit/fruit-name"
origin="xxforms:attribute('taste','good')" />
<xforms:insert ev:event="xforms-model-construct-done"
context="instance('instanceData')/fruits/fruit[position() > 0]/fruit-name"
origin="xxforms:attribute('taste','good')" />
Please suggest a way to insert this attribute to all fruit-name nodes at shot.
Since the fruits list dynamic, we need to have a dynamic solution for it.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我不了解 XForms,但是使用 XSLT 可以非常轻松地完成此任务:
当此转换应用于提供的 XML 文档时:
想要的正确结果是制作:
I don't know XForms, but this task is extremely easy with XSLT:
when this transformation is applied on the provided XML document:
the wanted, correct result is produced:
xxforms:iterate
扩展属性 是您的朋友。下面的方法就可以解决这个问题。在这种情况下,它甚至比 XSLT 更简单;)。The
xxforms:iterate
extension attribute is your friend here. The following will do the trick. And in this case, it's even simpler than XSLT ;).