PHP代码按字母顺序排序XML标签?

时间:2011-11-10 08:21:00

标签: php xml sorting

原始XML文本:

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

排序后,应该是:

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

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

1 个答案:

答案 0 :(得分:3)

可以完成,例如通过php's XSL module

<?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>