2

次のようなファイルがあります。

<xml>
 <person>
  <name>John</name>
  <age>33</age>
  <car>Yugo</car>
 </person>
 <person>
  <car>Tesla</car>
  <age>44</age>
  <name>Peter</name>
 </person>
<xml>

の要素が同じ順序ではないことに気付く人もいるかもしれません。

xml コンテンツを保持するだけでファイル内をフォーマットする ubersimple xslt を知っている人はいますか?

これは、必要な出力になります。

<xml>
 <person>
  <age>33</age>
  <car>Yugo</car>
  <name>John</name>
 </person>
 <person>
  <age>44</age>
  <car>Tesla</car>
  <name>Peter</name>
 </person>
<xml>

要素に同じ値が含まれるファイルには、何らかの順序があります (この場合、要素名で並べ替えられます)。

4

2 に答える 2

3

xsl:sort関数の値でソートするように指示すると、トリックを実行する必要がありlocal-name()ます。name()名前空間プレフィックスを考慮したい場合は、関数に置き換えてください。

次のスタイルシートは、文字どおり任意のドキュメントのすべての要素をコピーし、その内容をアルファベット順に並べ替えます。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
    <xsl:template match="*">
        <xsl:copy>
            <xsl:apply-templates>
                <xsl:sort select="local-name()"></xsl:sort>
            </xsl:apply-templates>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

属性、コメント、または CDATA は考慮されませんが、必要に応じてこれらを実装しても問題ありません。

于 2012-08-21T14:13:00.013 に答える
2

この XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes"/>

<xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates/>
    </xsl:copy>
</xsl:template> 

<xsl:template match="person">
    <xsl:copy>
        <xsl:apply-templates>
            <xsl:sort select="local-name()"/>
        </xsl:apply-templates>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

この XML に適用されます:

<?xml version="1.0" encoding="UTF-8"?>
<xml>
<person>
    <name>John</name>
    <age>33</age>
    <car>Yugo</car>
</person>
<person>
    <car>Tesla</car>
    <age>44</age>
    <name>Peter</name>
</person>
</xml>

次の出力が得られます。

<?xml version="1.0" encoding="UTF-8"?>
<xml>
<person>
    <age>33</age>
    <car>Yugo</car>
    <name>John</name>
</person>
<person>
    <age>44</age>
    <car>Tesla</car>
    <name>Peter</name>
</person>
</xml>
于 2012-08-21T14:25:37.113 に答える