将节点组移动到新节点

时间:2013-11-30 07:48:19

标签: xml xslt move

我有一个像这样的XML结构:

<root>
 <prices>....</prices>
 <image1>
  <img1>....</img1>
 </image1>
 <image2>
  <img2>....</img2>
 </image2>
 <image3>
  <img3>....</img3>
 </image3>
 <data>....</data>
</root>

但是我需要将image1,image2和image3移动到根节点的末尾,所以它看起来像这样

<root>
<prices>....</prices>
<data>....</data>
<sab>
<sab1>
<store>
<tab>
<cell1>...</cell1>
<cell2>
<image1>
<img1>....</img1>
</image1>
<image2>
<img2>....</img2>
</image2>
<image3>
<img3>....</img3>
</image3>
<cell2>
<tab>
<store>
<sab1>
<sab>
</root>

我尝试了一切,但无法使其正常工作。

1 个答案:

答案 0 :(得分:0)

您发布的所需结果以<tab><store><sab1><sab></root>结尾,这是一个格式不正确的XML,包含<tab>之类的所有开始标记。假设你想要

<root>
<prices>....</prices>
<data>....</data>
<sab>
<sab1>
<store>
<tab>
<cell1>...</cell1>
<cell2>
<image1>
<img1>....</img1>
</image1>
<image2>
<img2>....</img2>
</image2>
<image3>
<img3>....</img3>
</image3>
</cell2>
</tab>
</store>
</sab1>
</sab>
</root>

您将为根元素设置模板

<xsl:template match="root">
  <xsl:copy>
    <xsl:copy-of select="node()[not(self::image1 | self::image2 | self::image3)]"/>
    <sab>
    <sab1>
    <store>
    <tab>
    <cell1>...</cell1>
    <cell2>
      <xsl:copy-of select="image1 | image2 | image3"/>
    </cell2>
    </tab>
    </store>
    </sab1>
    </sab>
  </xsl:copy>
</xsl:template>