XPATH 1.0:在节点集中移动第一个项目到最后一个位置



给定XML文档

<items>
 <item><key></key><value>empty</value></item>
 <item><key>A</key><value>foo</value></item>
 <item><key>C</key><value>data</value></item>
 <item><key>B</key><value>bar</value></item>
</items>

给定/项目/项目nodeset,我希望将第一个项目移至最后一个位置,同时将所有其他项目保持在同一位置。

无法使用的方法:

  • |工会运营商保留文件订单。
  • <xsl:sort>我只想移动一个项目,而不是整理项目的整个列表。

预期结果:

<items>
 <item><key>A</key><value>foo</value></item>
 <item><key>C</key><value>data</value></item>
 <item><key>B</key><value>bar</value></item>
 <item><key></key><value>empty</value></item>
</items>

注意:可以通过第一个位置或空键确定要移动的项目(如果有帮助(。

这可能会对您有所帮助。

<!--  Identity template  -->  
<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>
<xsl:template match="items">
  <xsl:copy>
    <!-- Output attributes, if any. -->
    <xsl:apply-templates select="@*"/>
    <!-- Out item(s) that are not first. -->
    <xsl:apply-templates select="item[position() != 1]"/>
    <!-- Output the first item. -->
    <xsl:apply-templates select="item[position() = 1]"/>
  </xsl:copy>
</xsl:template>

一种方法是将以下模板与 Identity Template结合使用

<xsl:template match="item[1]">                     <!-- matches the first item element -->
    <xsl:copy-of select="following-sibling::*"/>   <!-- copies all but the first element -->
    <xsl:copy-of select="."/>                      <!-- copies the current/first element -->
</xsl:template>

输出是:

<item>
    <key>A</key>
    <value>foo</value>
</item>
<item>
    <key>C</key>
    <value>data</value>
</item>
<item>
    <key>B</key>
    <value>bar</value>
</item>
<item>
    <key/>
    <value>empty</value>
</item>

添加身份模板items元素包围,以提供完整的,所需的输出。

相关内容

  • 没有找到相关文章

最新更新