我正在学习考试,我们应该能够在XML中扭转事物。我试图扭转书籍的顺序,或者颠倒那些书中元素的顺序。
输入XML是:
<library>
<book>
<author>James Joyce</author>
<title>Ulysses</title>
<year>1922</year>
</book>
<book>
<author>Alois Jirasek</author>
<title>Psohlavci</title>
<year>1910</year>
</book>
<book>
<author>Tomas Hruska</author>
<title>Pascal pro zacatecniky</title>
<year>1989</year>
</book>
</library>
书籍的反转顺序:
<library>
<book>
<author>Tomas Hruska</author>
<title>Pascal pro zacatecniky</title>
<year>1989</year>
</book>
<book>
<author>Alois Jirasek</author>
<title>Psohlavci</title>
<year>1910</year>
</book>
<book>
<author>James Joyce</author>
<title>Ulysses</title>
<year>1922</year>
</book>
</library>
书中物品的逆转顺序:
<library>
<book>
<year>1922</year>
<title>Ulysses</title>
<author>James Joyce</author>
</book>
<book>
<year>1910</year>
<title>Psohlavci</title>
<author>Alois Jirasek</author>
</book>
<book>
<year>1989</year>
<title>Pascal pro zacatecniky</title>
<author>Tomas Hruska</author>
</book>
</library>
我被告知它应该很容易,所以不要尝试任何太花哨的东西。我可以通过for-each使用基本循环,也可以通过apply-templates和value-of使用递归。
答案 0 :(得分:1)
试试这个:
首先输入排序:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="library">
<library>
<xsl:for-each select="book">
<xsl:sort select="position()" order="descending"/>
<xsl:copy><xsl:apply-templates select="node()|@*"/></xsl:copy>
</xsl:for-each>
</library>
</xsl:template>
</xsl:stylesheet>
第二种类型:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="book">
<book>
<xsl:for-each select="*">
<xsl:sort select="position()" order="descending"/>
<xsl:copy><xsl:apply-templates select="node()|@*"/></xsl:copy>
</xsl:for-each>
</book>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
最简单的方法是按位置()降序 sort 节点。
答案 2 :(得分:0)
非常简单:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/library">
<library>
<xsl:for-each select="book">
<xsl:sort select="author" order="descending"/>
<xsl:copy-of select="."/>
</xsl:for-each>
</library>
</xsl:template>
</xsl:stylesheet>