如何根据 Orbeon 中的另一个重复节点位置引用相关重复节点位置?
How to refer to relevant repeated node position based to another repeated node position in Orbeon?
我创建了一个带有重复的表单来显示 data.But 并非所有行元素都来自同一节点集的列表!
table 是根据 Student 节点的数量创建的:
...
<Student>
<Firstname>Kostas</Firstname>
<Lastname>Oikonomopoulos</Lastname>
</Student>
<Student>
<Firstname>Teo</Firstname>
<Lastname>Kartsonas</Lastname>
</Student>
...
<Math>
<Name>Mathematics</Name>
<Grade>Class A</Class>
</Math>
<Math>
<Name>Physics</Name>
<Class>Class B</Class>
</Math>
...
所以我想像这样创建一个重复的网格:
Headers -Lastname- -Firstname- -Lesson- -Class-
1# ---- Oikonomopoulos ---- Kostas ---- Mathematics ---- Class A
2# ---- Kartsonas ---- Teo ---- Physics ---- Class B
其中数据列表由每个学生的每一行组成,每个学生都有一节课和一个 class 这节课基于学生的相对位置!
所以我想在每一行中:
//(Student)[i]/Firstname, //(Student)[i]/Lastname, //(Math)[i]/Name, //(Math)[i]/Class
其中 i
是每个 Student 节点迭代的位置。
我使用 xf:repeat 创建数据 table :
...
<xf:repeat ref="instance('fr-form-instance')//Student">
...
...
<xh:td>
<xf:output ref="Firstname"/>
</xh:td>
<xh:td>
<xf:output ref="Lastname"/>
</xh:td>
...
<xh:td>
<xf:output ref="(//Math)[position()]/Name"/>
</xh:td>
<xh:td>
<xf:output ref="(//Math)[position()]/Class"/>
</xh:td>
...
学生按预期显示,但课程和 classes 在所有迭代中具有相同的值!喜欢:
Headers -Lastname- -Firstname- -Lesson- -Class-
1# ---- Oikonomopoulos ---- Kostas ---- Mathematics ------------------ Class A
2# ---- Kartsonas ---- Teo ---- Mathematics (wrongValue!) ---- Class A (wrongValue!)
奇怪的是,如果 position() 单独作为列中的输出,正确显示 1,2,...!?!
我正在使用 Orbeon 4.5
在我们要引用的节点集在重复节点集之外的情况下,position()函数在计算中不起作用 如我所料。
相反,解决方案是使用 xxf:repeat-position() 函数!
所以不是,
<xf:output ref="(//Math)[position()]/Name"/>
,正确的做法是:
<xf:output ref="(//Math)[xxf:repeat-position()]/Name"/>
xxf:repeat-position() function works in the UI
<xf:output value="xxf:repeat-position()"/>
我创建了一个带有重复的表单来显示 data.But 并非所有行元素都来自同一节点集的列表! table 是根据 Student 节点的数量创建的:
...
<Student>
<Firstname>Kostas</Firstname>
<Lastname>Oikonomopoulos</Lastname>
</Student>
<Student>
<Firstname>Teo</Firstname>
<Lastname>Kartsonas</Lastname>
</Student>
...
<Math>
<Name>Mathematics</Name>
<Grade>Class A</Class>
</Math>
<Math>
<Name>Physics</Name>
<Class>Class B</Class>
</Math>
...
所以我想像这样创建一个重复的网格:
Headers -Lastname- -Firstname- -Lesson- -Class-
1# ---- Oikonomopoulos ---- Kostas ---- Mathematics ---- Class A
2# ---- Kartsonas ---- Teo ---- Physics ---- Class B
其中数据列表由每个学生的每一行组成,每个学生都有一节课和一个 class 这节课基于学生的相对位置!
所以我想在每一行中:
//(Student)[i]/Firstname, //(Student)[i]/Lastname, //(Math)[i]/Name, //(Math)[i]/Class
其中 i
是每个 Student 节点迭代的位置。
我使用 xf:repeat 创建数据 table :
...
<xf:repeat ref="instance('fr-form-instance')//Student">
...
...
<xh:td>
<xf:output ref="Firstname"/>
</xh:td>
<xh:td>
<xf:output ref="Lastname"/>
</xh:td>
...
<xh:td>
<xf:output ref="(//Math)[position()]/Name"/>
</xh:td>
<xh:td>
<xf:output ref="(//Math)[position()]/Class"/>
</xh:td>
...
学生按预期显示,但课程和 classes 在所有迭代中具有相同的值!喜欢:
Headers -Lastname- -Firstname- -Lesson- -Class-
1# ---- Oikonomopoulos ---- Kostas ---- Mathematics ------------------ Class A
2# ---- Kartsonas ---- Teo ---- Mathematics (wrongValue!) ---- Class A (wrongValue!)
奇怪的是,如果 position() 单独作为列中的输出,正确显示 1,2,...!?! 我正在使用 Orbeon 4.5
在我们要引用的节点集在重复节点集之外的情况下,position()函数在计算中不起作用 如我所料。 相反,解决方案是使用 xxf:repeat-position() 函数!
所以不是,
<xf:output ref="(//Math)[position()]/Name"/>
,正确的做法是:
<xf:output ref="(//Math)[xxf:repeat-position()]/Name"/>
xxf:repeat-position() function works in the UI
<xf:output value="xxf:repeat-position()"/>