1

私は XSLT について何も知らないので、この問題について簡単にヘッドアップする必要があります。

私は次のようなxml構造を持っています:

<node>
    <sub_node_1> value_1 </sub_node_1>
    ...
    <sub_node_n> value_n </sub_node_n>
    <repeatable_node> another_value_1 </repeatable_node>
</node>
...
<node>
    <sub_node_1> value_1 </sub_node_1>
    ...
    <sub_node_n> value_n </sub_node_n>
    <repeatable_node> another_value_m </repeatable_node>
</node>

そして、同じ要素の下に異なる値を持つ反復可能なノードを集約するもの、つまり次のようなものが必要です

<node>
    <sub_node_1> value_1 </sub_node_1>
    ...
    <sub_node_n> value_n </sub_node_n>
    <repeatable_node> another_value_1 </repeatable_node>
    ...
    <repeatable_node> another_value_m </repeatable_node>
</node>
4

1 に答える 1

1

以下は、単純な XSLT 1.0 互換のソリューションです。

スタイルシート

<?xml version="1.0" encoding="iso-8859-1"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>
  <xsl:strip-space elements="*"/>

  <!-- Identity transform -->
  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <!-- Keep only the first <node> element -->
  <xsl:template match="node[1]">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
      <!-- Apply all repeatable_node children of following <node> siblings. -->
      <xsl:apply-templates select="following-sibling::node/repeatable_node"/>
    </xsl:copy>
  </xsl:template>

  <!-- Drop all <node> elements following the first <node> element -->
  <xsl:template match="node[position() &gt; 1]"/>

</xsl:stylesheet>

入力

<nodes>
  <node>
      <sub_node_1> value_1 </sub_node_1>
      <sub_node_n> value_n </sub_node_n>
      <repeatable_node> another_value_1 </repeatable_node>
  </node>
  <node>
      <sub_node_1> value_1 </sub_node_1>
      <sub_node_n> value_n </sub_node_n>
      <repeatable_node> another_value_m </repeatable_node>
  </node>
</nodes>

出力

<?xml version="1.0"?>
<nodes>
  <node>
    <sub_node_1> value_1 </sub_node_1>
    <sub_node_n> value_n </sub_node_n>
    <repeatable_node> another_value_1 </repeatable_node>
    <repeatable_node> another_value_m </repeatable_node>
  </node>
</nodes>
于 2013-02-20T12:42:40.033 に答える