0

私はこのxmlを持っています:

 <Process>
          <elem0>
             <pcode>xx<pcode>
          </elem0>
          <elem1>
             <pcode>xy<pcode>
          </elem1>
          <elem2>
             <pcode>ab<pcode>
          </elem2>
          <elem3>
             <pcode>AD<pcode>
          </elem3>               
    </Process>

そして、pcode value ='xy'の要素をEdProcessに移動する必要があります。これは、xsltで正常に実行されています。また、ここの仲間のメンバーの助けを借りて、プロセス要素を順番に表示しました。ここで問題となるのは、EdProcessはelem0から開始する必要があり、EdProcess内で移動する新しい要素は、elem0、elem1、elem2などの順序である必要があります。

<Process>
      <elem0>
         <pcode>xx<pcode>
      </elem0>
      <elem1>
         <pcode>ab<pcode>
      </elem1>
      <elem2>
         <pcode>AD<pcode>
      </elem2>               
</Process>



<EdProcess>
          <elem1>
             <pcode>xy<pcode>
          </elem1>
   </EdProcess>

になりたいです

<Process>
          <elem0>
             <pcode>xx<pcode>
          </elem0>
          <elem1>
             <pcode>ab<pcode>
          </elem1>
          <elem2>
             <pcode>AD<pcode>
          </elem2>               
    </Process>

 <EdProcess>
          <elem0>
             <pcode>xy<pcode>
          </elem0>
   </EdProcess>

フロントエンドに正しく表示されますが、行き詰まります。並べ替えを試しましたが、機能しませんでした。elemの識別が変更されているため、ある種のテンプレートを使用するのは難しくなっています。EdProcessを作成しているため、テンプレートマッチングが機能していません。アドバイスありがとうございます!

4

1 に答える 1

0

これは、前の質問に対する私の回答を少し変更することで実行できます。

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

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

  <xsl:template match="/*">
    <root>
      <Process>
        <xsl:apply-templates select="*[pcode != 'xy']" mode="elems" />
      </Process>
      <EdProcess>
        <xsl:apply-templates select="*[pcode = 'xy']" mode="elems" />
      </EdProcess>
    </root>
  </xsl:template>

  <xsl:template match="*" mode="elems">
    <xsl:element name="elem{position() - 1}">
      <xsl:apply-templates select="@* | node()" />
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>

これが次の入力で実行される場合:

<Process>
  <elem0>
    <pcode>xx</pcode>
  </elem0>
  <elem1>
    <pcode>xy</pcode>
  </elem1>
  <elem2>
    <pcode>ab</pcode>
  </elem2>
  <elem3>
    <pcode>xy</pcode>
  </elem3>
  <elem4>
    <pcode>AD</pcode>
  </elem4>
</Process>

結果は次のとおりです。

<root>
  <Process>
    <elem0>
      <pcode>xx</pcode>
    </elem0>
    <elem1>
      <pcode>ab</pcode>
    </elem1>
    <elem2>
      <pcode>AD</pcode>
    </elem2>
  </Process>
  <EdProcess>
    <elem0>
      <pcode>xy</pcode>
    </elem0>
    <elem1>
      <pcode>xy</pcode>
    </elem1>
  </EdProcess>
</root>
于 2013-03-13T17:57:51.383 に答える