1
我已經經歷了許多類似的問題和XSLT教程,但仍然無法弄清楚XSLT是如何工作的。如何使用基於XML節點屬性值的XSLT進行排序?
下面是我想排序XML: -
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.1" version="1.1">
<file product="mxn" source-language="en">
<body>
<!-- Menu -->
<msg-unit id="Menu.PerformTask">
<msg>Perform Task</msg>
<note>When selected performs a task.</note>
</msg-unit>
<msg-unit id="Menu.Add">
<msg>Add New</msg>
<note>When selected Adds a new row.</note>
</msg-unit>
</body>
</file>
</xliff>
預期成果是: -
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.1" version="1.1">
<file product="mxn" source-language="en">
<body>
<!-- Menu -->
<msg-unit id="Menu.Add">
<msg>Add New</msg>
<note>When selected Adds a new row.</note>
</msg-unit>
<msg-unit id="Menu.PerformTask">
<msg>Perform Task</msg>
<note>When selected performs a task.</note>
</msg-unit>
</body>
</file>
</xliff>
的<msg-unit>
標籤需要根據自己的id
屬性的值進行排序。其他標籤(如評論)應該是他們曾經的地方。
我嘗試了這麼多的組合,但我對XSLT毫無頭緒。以下是我最後一次嘗試。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<xsl:copy-of select="*">
<xsl:apply-templates>
<xsl:sort select="attribute(id)" />
</xsl:apply-templates>
</xsl:copy-of>
</xsl:template>
</xsl:stylesheet>
這一個簡單地吐出任何XML它得到了,沒有任何的排序。
感謝它的工作。雖然' '似乎'indent =「yes」'似乎沒有效果。也許''重寫了這個。有沒有方法可以刪除空行而不會鬆動縮進? –
AppleGrew
@AppleGrew奇怪,適用於MS解析器。可能嘗試這些空白/漂亮的打印模板之一? http://stackoverflow.com/questions/1134318/xslt-xslstrip-space-does-not-work – StuartLC