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 开始,并且在其中移动的任何新元素都应该按顺序排列,即 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 回答