全部読み込み
simplexml_import_domやsimplexml_load_stringでSimpleXMLElementを作る
ストリーム
メモリを気にするならこっち
XMLReaderをopen
でファイルを指定して使う
XMLReader::expand
を使えばDOMNodeに変換できるのでDOMDocument::importNode
でDOMDocumentを作ることもできます。
$xmlReader = new XMLReader();
$xmlReader->open('test.xml', 'UTF-8', LIBXML_NOBLANKS);
while ($xmlReader->read())
{
$xmlReader->name;
$xmlReader->getAttribute('属性');
$xmlReader->value;
}
$xmlObject->close();
その他
XXE対策
libxmlのバージョンによっては外部実体参照がデフォルトで無効になっていないものがる。
CDATA
XMLの要素には、特殊文字を直接記述することができない。
直接記述したい場合は<![CDATA[
~]]>
を記載することでその間に記述することは可能。(間に終了の]]>
を含めることは出来ない)
<![CDATA[
~]]>
を使わない場合はエスケープする。
<element><![CDATA[XXXXXXXXXX<p>XXXXXXXXXX]]></element>
<element>XXXXXXXXXX<p>XXXXXXXXXX</element>