按字母顺序排序XML标记的PHP代码


PHP code to sort XML tags alphabetically?

原始XML文本:

<a>
  <ccc />
  <bb></bb>
  <d>
    <ff />
    <eee />
  </d>
</a>

排序后应该是:

<a>
  <bb />
  <ccc />
  <d>
    <eee />
    <ff />
  </d>
</a>

如果你知道一个好的方法,请告诉我。谢谢你!

可以通过php的XSL模块

<?php
$xsl = new XSLTProcessor();
$xsl->importStyleSheet( getDoc(getStylesheetData()) );
$doc = getDoc( getDocData() );
echo $xsl->transformToXML($doc);
function getDoc($s) {
    $doc = new DOMDocument;
    $doc->loadxml($s);
    return $doc;
}
function getStylesheetData() {
    return <<< eox
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="iso-8859-1" indent="yes"/>
<xsl:strip-space elements="*" />
<xsl:template match="@* | node()">
    <xsl:copy>
        <xsl:copy-of select="@*"/>
        <xsl:apply-templates select="node()">
            <xsl:sort select="name()"/>
        </xsl:apply-templates>
    </xsl:copy>
</xsl:template>
</xsl:stylesheet>   
eox;
}

function getDocData() {
    return <<< eox
<a>
    <ccc />
    <bb></bb>
    <d>
        <ff />
        <eee />
    </d>
</a>
eox;
}

打印

<?xml version="1.0" encoding="iso-8859-1"?>
<a>
  <bb/>
  <ccc/>
  <d>
    <eee/>
    <ff/>
  </d>
</a>