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

如何使用XSLT反转XML数据标记?,xml,xslt,reverse,Xml,Xslt,Reverse,例如,下面是XML文件 <person> <name>Adam</name> <lname>Palmer</lname> <profession> Programmer</profession> <salary>80,000</salary> </person> 亚当 帕默 程序员 80,000 现在,在XSLT中,如果我编写代码 <xsl:template mat

例如,下面是XML文件

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

亚当
帕默
程序员
80,000
现在,在XSLT中,如果我编写代码

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

所以,在HTML文件中,它将显示:Adam Palmer程序员80000

但我需要以下输出:Palmer Adam程序员80000。

我需要颠倒前2个数据标记的顺序


各位有什么想法吗?

您可以轻松处理每个标签的标签

但是,如果这个逻辑对名字和名字以外的任何东西都是正确的,我会把它们隔离开来

像这样:

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

亚当
帕默
程序员
80,000
这样,您就可以为
标记添加单独的模板

当然,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>

<--其余标签-->
等等

这样可能会产生一些类似样板的代码,但您可以获得灵活性(当标记需要单独的逻辑时)

注意:这可能不是复制粘贴材料,只是在没有可能进行测试的情况下键入,但逻辑仍然存在。

推送样式表:

<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