-1

我正在尝试编写一些 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) 中是可能的,这个问题可能与我想要做的一样接近,尽管该问题仅基于一个元素,而我有多个节点。

任何帮助,将不胜感激。

4

1 回答 1

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"/>

看起来不错。

于 2013-11-05T17:49:04.657 回答