我正在使用PHP查询聊天室中的人员列表,然后附加到XML,以便客户端的AJAX脚本可以抓取它。我不想对服务器施加太多压力,按名称按字母顺序排序。因此;我正在考虑在客户端使用xslt来订购它。但是我不确定如何将它附加到XML页面,当我这样做时,我不断收到错误。 :/ 所以有人可以告诉我如何正确地做到这一点。
PHP:
header('Content-type: application/xml; charset=utf-8');
mysqli_set_charset($mysqli_connect, "UTF8");
$xml = new DomDocument("1.0", "UTF-8");
$root = $xml->createElement('root');
$xml->appendChild($root);
$message = $xml->createElement('message');
$root->appendChild($message);
//while loop and appending the result from query
echo $xml->saveXML();
结果:
<root>
<message>
<name>foo</name>
<gender>1</gender>
<chat_message>hello world</chat_message>
</message>
<message>
<name>boo</name>
<gender>1</gender>
<chat_message>Hello</chat_message>
</message>
</root>
我需要XML按名称按字母顺序对其进行排序:
<root>
<message>
<name>boo</name>
<gender>1</gender>
<chat_message>Hello</chat_message>
</message>
<message>
<name>foo</name>
<gender>1</gender>
<chat_message>hello world</chat_message>
</message>
</root>
更新: 试图在php页面上附加xslt,但我一直在发错: XML解析错误:格式不正确。
$xslt = $xml->createProcessingInstruction('xml-stylesheet', 'type="text/xsl" href="style.xsl"');
$xml->appendChild($xslt);
答案 0 :(得分:0)
这是一种更简单的方法..
// convert xml to native array
$array = json_decode(json_encode(simplexml_load_string($xmlstring)),TRUE);
// add stuff to it..
$array['something'] = 'something';
// do whatever sorting..
asort($array);
// convert back to xml..
$xml = new SimpleXMLElement('<root/>');
array_walk_recursive($array, array ($xml, 'addChild'));
print $xml->asXML();
答案 1 :(得分:0)
考虑使用PHP的XSLT processor class(可能需要启用xsl扩展名),您可以在message/name
值上使用<xsl:sort>
应用嵌入式XSLT。
...
$xslstr = '<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="root">
<root>
<xsl:for-each select="message">
<xsl:sort select="name"/>
<message>
<xsl:copy-of select="*"/>
</message>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>';
$xsl = new DOMDocument;
$xsl->loadXML($xslstr);
// Configure transformer
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl);
// Transform XML source
$newXML = new DOMDocument;
$newXML = $proc->transformToXML($xml);
// Output New XML content
echo $newXML;
输出
<?xml version="1.0"?>
<root>
<message>
<name>boo</name>
<gender>1</gender>
<chat_message>Hello</chat_message>
</message>
<message>
<name>foo</name>
<gender>1</gender>
<chat_message>hello world</chat_message>
</message>
</root>