我正在尝试编写一些修改服务输出的XSLT,并将其分组为逻辑结构以供使用。但是,我对如何做到这一点感到茫然。
以下是该服务的输出。唯一可以确定的是,尽管每个省略号中都有子节点,但这些项目都是这样返回的。
输出
<items>
<text>...</text>
<text>...</text>
<text>...</text>
<text>...</text>
<comment>...</comment>
<comment>...</comment>
<comment>...</comment>
<comment>...</comment>
<discussion>...</discussion>
<discussion>...</discussion>
<discussion>...</discussion>
<discussion>...</discussion>
<information>...</information>
<information>...</information>
<information>...</information>
<information>...</information>
</items>
所需
<items>
<item>
<text>...</text>
<comment>...</comment>
<discussion>...</discussion>
<information>...</information>
</item>
<item>
<text>...</text>
<comment>...</comment>
<discussion>...</discussion>
<information>...</information>
</item>
<item>
<text>...</text>
<comment>...</comment>
<discussion>...</discussion>
<information>...</information>
</item>
<item>
<text>...</text>
<comment>...</comment>
<discussion>...</discussion>
<information>...</information>
</item>
</items>
我很确定这在XSLT(1.0)中是可能的,而this question可能与我想要做的尽可能接近,尽管这个问题仅基于一个元素,而我有多个节点。
任何帮助都将不胜感激。
答案 0 :(得分:3)
使用
<xsl:template match="items">
<xsl:copy>
<xsl:apply-templates select="text"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text">
<xsl:variable name="pos" select="position()"/>
<item>
<xsl:copy-of select=". | ../comment[$pos] | ../discussion[$pos] | ../information[$pos]"/>
</item>
</xsl:template>
创建结构,只需要
<xsl:output indent="yes"/>
看起来不错。