我有一个xml结构,该结构描述了一个具有(x * 2)行且始终为2列的简单表(为简单起见,在下面的示例中x = 1):
<table>
<tr>
<td>
1
</td>
<td>
2
</td>
</tr>
<tr>
<td>
3
</td>
<td>
4
</td>
</tr>
</table>
现在,我想按以下顺序浏览带有XPath表达式的层次结构:
1-3-2-4
使用访问符号:
row [1] :: column [1]-> row [2] :: column [1]-> row [1] :: column [2]-> row [2] :: column [2] < / p>
我该如何使用XPath表达式?
我正在Schema ST4内完成所有这些工作,但是我也欢迎原始xpath表达式的答案,因为我很受困扰。
仅供参考,我来自C ++背景,因此我的想法是我必须能够使用一个迭代器(xsl:iterate)来对相应的行/列进行迭代,但是直到现在我还无法完成这项工作。但是我对XPath还是很陌生,所以我可能缺乏对自己进行派生的理解。
我的xsl迭代器使用
选择每个奇数行(即1,3,5 ..)。tr [position()mod 2 = 1]
这很好。然后,我认为迭代器内部的另一个迭代器将允许我遍历该行的每一列(1,2,3 ..)。可能可行,但是如何从那里获得 next 行的等效列?
这在XPath方面是否有意义,还是我必须从另一个角度进行攻击?
答案 0 :(得分:1)
您提到了xsl:iterate
(它是XSLT 3的一部分),所以我假设您可以使用XSLT 2或3,并且我认为可以通过位置分组完成按列处理/输出单元格的一般任务:
<xsl:template match="table">
<xsl:variable name="cols" select="count(tr[1]/td)"/>
<xsl:for-each-group select="tr/td" group-by="position() mod $cols">
<xsl:sequence select="current-group()!normalize-space()"/>
</xsl:for-each-group>
</xsl:template>