• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:XMLReaderから取り出したデータのソート)

XMLReaderから取り出したデータのソート

このQ&Aのポイント
  • XMLデータのnewsに付加されているidの順にソートする方法を教えてください。
  • XMLデータのソート方法を知りたいです。
  • XMLReaderを使用して取り出したデータをidの順にソートする方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

「私だったら」ソートが必要な場合はXSLTを使います。 例示されたサンプルの場合下記のsample.xslを作成し... <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" cdata-section-elements="head body"/> <xsl:template match="/topics"> <topics> <xsl:for-each select="news"> <xsl:sort select="@id"/> <xsl:copy-of select="."/> </xsl:for-each> </topics> </xsl:template> </xsl:stylesheet> XSLTでソートしたXMLを生成します...(php 5.2.6) $xml = new DOMDocument; $xml->load('sample.xml'); $xsl = new DOMDocument; $xsl->load('sample.xsl'); $proc = new XSLTProcessor; $proc->importStyleSheet($xsl); $sortedXml = $proc->transformToXML($xml); こんな感じで。

t_netbug
質問者

お礼

XSLの書き方がおかしいのかエラーが出てしまいます^^; 質問時には簡略していましたが、実際のXMLデータは階層がさらに深くなっていて <topics> <news id="no0001"> <target> <deny>*</deny> <allow>1,3,5</allow> </target> <message> <head><![CDATA[]]></head> <body><![CDATA[]]></body> </message> </news> </topics> のようになっています。 この場合、XSLの書き方は <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" /> <xsl:template match="/topics"> <topics> <xsl:for-each select="news"> <xsl:sort select="@id"/> <xsl:copy-of select="."/> </xsl:for-each> </topics> </xsl:template> </xsl:stylesheet> ではダメなのでしょうか?

t_netbug
質問者

補足

チェックが遅くなり申し訳ありません。 ありがとうございます、上記方法でコーディングしてみます。 不明点などが出るかもしれないので、締め切りは無事解決後にさせて頂きます。

関連するQ&A