如何根据 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()"/>