1

XML から XML への変換を作成する必要があります。入力 XML ドキュメントには、1 つのメイン リストに変換したい (子リストを削除せずに) 多数の兄弟リスト (子リストを含む) が含まれています。言い換えれば、最初のリスト以降の各兄弟リストを抑制したいのですが、すべての子リストを保持します。

入力 XML ドキュメントの例を次に示します。

<back>
<index id="subject">
    <title>Subject Index</title>
    <index id="section">
        <list id="index">
            <item>apple</item>
            <item>almond</item>
            <item>american cheese</item>
            <item>Avocado 
                <list id="index">
                    <item>Mexican</item>
                    <item>Chilian</item>
                </list>
            </item>
            <item>asparagus</item>
            <item>anchovie</item>
        </list>
    </index>
    <index id="section">
        <list id="index">
            <item>banana</item>
            <item>barley</item>
            <item>bagel 
                <list id="index">
                    <item>sesame</item>
                    <item>plain</item>
                    <item>everything</item>
                </list>
            </item>
            <list id="index">
                <item>bean 
                    <list id="index">
                        <item>green bean</item>
                        <item>navy bean</item>
                    </list>
                </item>
            </list>
        </list>
    </index>
</index>

そして、1 つのメイン リスト id="index" を使用して、上記を以下の構造に変換したいと考えています。リストの子は残す必要がありますが、兄弟リストは抑制する必要があります。

<back>
<index id="subject">
    <title>Subject Index</title>
        <list id="index">
            <item>apple</item>
            <item>almond</item>
            <item>american cheese</item>
            <item>Avocado 
                <list id="index">
                    <item>Mexican</item>
                    <item>Chilian</item>
                </list>
            </item>
            <item>asparagus</item>
            <item>anchovie</item>
            <item>banana</item>
            <item>barley</item>
            <item>bagel
            <list id="index">
                <item>sesame</item>
                <item>plain</item>
                <item>everything</item>
            </list>
            </item>
            <list id="index">
                <item>bean 
                    <list id="index">
                        <item>green bean</item>
                        <item>navy bean</item>
                    </list>
                </item>
            </list>
         </list>
</index>

4

1 に答える 1

0

この変換:

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

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


 <xsl:template match="index[1]/list[1]">
  <xsl:copy>
   <xsl:apply-templates select="@*| ../../index/list/node()"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="index/index"><xsl:apply-templates/></xsl:template>
 <xsl:template match="/*/*/index[position() >1]"/>
</xsl:stylesheet>

提供された XML ドキュメントに適用した場合:

<back>
    <index id="subject">
        <title>Subject Index</title>
        <index id="section">
            <list id="index">
                <item>apple</item>
                <item>almond</item>
                <item>american cheese</item>
                <item>Avocado
                    <list id="index">
                        <item>Mexican</item>
                        <item>Chilian</item>
                    </list></item>
                <item>asparagus</item>
                <item>anchovie</item>
            </list>
        </index>
        <index id="section">
            <list id="index">
                <item>banana</item>
                <item>barley</item>
                <item>bagel
                    <list id="index">
                        <item>sesame</item>
                        <item>plain</item>
                        <item>everything</item>
                    </list></item>
                <list id="index">
                    <item>bean
                        <list id="index">
                            <item>green bean</item>
                            <item>navy bean</item>
                        </list></item>
                </list>
            </list>
        </index>
    </index>
</back>

必要な正しい結果が生成されます。

<back>
   <index id="subject">
      <title>Subject Index</title>
      <list id="index">
         <item>apple</item>
         <item>almond</item>
         <item>american cheese</item>
         <item>Avocado
                    <list id="index">
               <item>Mexican</item>
               <item>Chilian</item>
            </list>
         </item>
         <item>asparagus</item>
         <item>anchovie</item>
         <item>banana</item>
         <item>barley</item>
         <item>bagel
                    <list id="index">
               <item>sesame</item>
               <item>plain</item>
               <item>everything</item>
            </list>
         </item>
         <list id="index">
            <item>bean
                        <list id="index">
                  <item>green bean</item>
                  <item>navy bean</item>
               </list>
            </item>
         </list>
      </list>
   </index>
</back>
于 2013-02-21T04:57:53.920 に答える