私は多くの同様の質問と XSLT チュートリアルを経験してきましたが、それでも 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 をソートせずに吐き出すだけです。