如何使用XSLT反转XML数据标签?

时间:2011-04-08 13:50:43

标签: xml xslt reverse

例如,在XML文件下面。

<person>
<name>Adam</name>
<lname>Palmer</lname>
<profession> Programmer</profession>
<salary>80,000</salary>
</person>

现在,在XSLT中,如果我编码,

<xsl:template match="person">
 <xsl:apply-templates/><xsl:text> </xsl:text>
</xsl:template>

因此,在HTML文件中它将显示:Adam Palmer Programmer 80,000。

但我需要以下输出: Palmer Adam Programmer 80,000。

我需要反转前2个数据标签的顺序。

任何想法的人?

2 个答案:

答案 0 :(得分:1)

您可以轻松处理每个标记的标记。

但如果逻辑适用于除名称和名字之外的任何内容,我会隔离它们。

像这样:

<person>
<name>
  <fname>Adam</fname>
  <lname>Palmer</lname>
</name>
<profession> Programmer</profession>
<salary>80,000</salary>
</person>

通过这种方式,您可以为<name>代码添加单独的模板。

当然,xml的结构通常不会改变:

<xsl:template match="person">
 <xsl:apply-templates select="lname"/></xsl:text>
 <xsl:apply-templates select="name"/></xsl:text>
 < -- rest of the tags --> 
</xsl:template>


<xs:template match="lname>
   <xsl:value-of "." />
</xsl:template>    


<xs:template match="name>
   <xsl:value-of "." />
</xsl:template>

依旧......

这种方式可能会导致更多样板代码,但你会获得灵活性(当标签需要单独的逻辑时)

注意:这可能不是复制粘贴材料,只是键入它而没有测试的可能性,但逻辑仍然存在。

答案 1 :(得分:1)

推送样式表样式:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:strip-space elements="*"/>
    <xsl:template match="person/*">
        <xsl:apply-templates/>
        <xsl:text>&#x20;</xsl:text>
    </xsl:template>
    <xsl:template match="person">
        <xsl:apply-templates select="lname"/>
        <xsl:apply-templates select="name"/>
        <xsl:apply-templates select="*[not(self::name|self::lname)]"/>
        <xsl:text>&#xA;</xsl:text>
    </xsl:template>
</xsl:stylesheet>

输出:

Palmer Adam  Programmer 80,000