xsl group标记到父组中

时间:2014-11-02 14:00:02

标签: xml xslt

我有这个xml:

<Row>
        <one>1</one>
        <two>2</two>
        <three>3</tree>
        <four>4</four>
        <five>5</five>
        <six>6</six>
        <seven>7</seven>
        <...
        <...
        <...
        <...
        <...
 </Row>

我希望将一个两个标签分组到主标签中,其余所有(可能是其中一百个)组合到其他标签中:

预期结果:

<Row>

   <main>
        <one>1</one>
        <two>2</two>
    <main>  

   <others> 
        <three>3</tree>
        <four>4</four>
         <five>1</five>
        <six>2</six>
        <seven>3</seven>
        <...
        <...
        <...
        <...
        <...
    <others> 

 </Row>

我的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" omit-xml-declaration="yes" encoding="UTF-8" indent="yes"/>
        <xsl:template match="node()|@*">
            <xsl:copy>
                <xsl:apply-templates select="node()|@*"/>
            </xsl:copy>
        </xsl:template>


        <xsl:template match="Row">

          <main>
            <xsl:apply-templates select="one|two"/>
          </main>

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

        </xsl:template>

但是我对另一个标签也是一个和两个,我想要一个和两个只在主标签中。

1 个答案:

答案 0 :(得分:0)

您在一个和两个上应用模板两次。首先明确地说,在第二场比赛中隐含第二:node()| @ *。 只需从第二场比赛中筛选出来。 这个xpath应该可以完成这项工作(没有经过测试,我早上太早了):

<xsl:template match="Row">

      <main>
        <xsl:apply-templates select="one|two"/>
      </main>

      <others>
        <!-- No need to apply on attributes (@*), 
        unless you explicitely want to add rows attributes to others element.-->
        <xsl:apply-templates select="node()[not(name()='one' or name()='two')]"/>   
      </others>

    </xsl:template>