0

同様の質問を検索しましたが、機能する提案を行うことができませんでした。私はそれを変更する必要がある次のxmlを持っています

  <XDB>
     <ROOT>
           <KEY><ID>12345</ID><DATE>5/10/2011</DATE></KEY>
           <PERSONAL><ID>1</ID><INFO><LASTNAME>Smith</LASTNAME>...</INFO></PERSONAL>
           <CONTACT><ID>1</ID><EMAIL>asmith@yahoo.com</EMAIL>...</CONTACT>
     </ROOT>
    <ROOT>
           <KEY><ID>98765</ID><DATE>5/10/2013</DATE></KEY>
           <CONTACT><ID>2</ID><EMAIL>psmithton@yahoo.com</EMAIL>...</CONTACT>
     </ROOT>

...

  </XDB>

そして、次のようにする必要があります。

 <XDB>
     <ROOT>
       <KEY><ID>12345</ID><DATE>5/10/2011</DATE>
           <PERSONAL><ID>1</ID><INFO><LASTNAME>Smith</LASTNAME>...</INFO></PERSONAL>
           <CONTACT><ID>1</ID><EMAIL>asmith@yahoo.com</EMAIL>...</CONTACT>
        </KEY>

     </ROOT>
    <ROOT>
       <KEY><ID>98765</ID><DATE>5/10/2013</DATE>
           <CONTACT><ID>2</ID><EMAIL>psmithton@yahoo.com</EMAIL>...</CONTACT>
       </KEY>
     </ROOT>

...

  </XDB>

最初の「キー」兄弟の子として 2...n 個の兄弟を作成する必要があります。本質的に、私はクロージング < /KEY> を削除し、クロージング < /ROOT> の前に置く必要があります。よろしくお願いします。ありがとう。

4

1 に答える 1

1

Identity 変換に基づく xslt に従って 、このジョブを作成できます

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

    <!-- Copy everything you find... -->
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*" />
        </xsl:copy>
    </xsl:template>

    <!-- ... but if you find first element inside ROOT ... -->
    <xsl:template match="ROOT/node()[1]">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*" />
            <!-- ... copy its sibling into it ... -->
            <xsl:copy-of select="following-sibling::*" />
        </xsl:copy>
    </xsl:template>

    <!-- ignore other elements inside ROOT element since they are copied in template matching first element -->
    <xsl:template match="ROOT/node()[position() &gt; 1]" />

</xsl:stylesheet>
于 2013-08-14T05:24:26.883 に答える