SimpleXML を使用して XML オブジェクトを最初から作成する
質問
PHP の SimpleXML 関数を使用して XML オブジェクトを最初から作成することは可能ですか?関数リストを見ると、既存の XML 文字列をオブジェクトにインポートして操作する方法があります。しかし、XML オブジェクトをプログラムで最初から生成したい場合、それを行うための最良の方法は何でしょうか?
simplexml_load_string() を使用して必要なルート文字列を渡すと、子を追加して操作できるオブジェクトが得られることがわかりました。ただし、これは一種のハッキングのように思えますが、ロードする前に XML を文字列に実際にハードコーディングする必要があるためです。
を使ってやりました DOMDocument 関数, ただし、DOM が純粋な XML ドキュメントの作成にどのような関係があるのかわからないので、少し混乱します...たぶん、名前が悪いだけかもしれません:-)
解決
できますよ。例えば。
<?php
$newsXML = new SimpleXMLElement("<news></news>");
$newsXML->addAttribute('newsPagePrefix', 'value goes here');
$newsIntro = $newsXML->addChild('content');
$newsIntro->addAttribute('type', 'latest');
Header('Content-type: text/xml');
echo $newsXML->asXML();
?>
出力
<?xml version="1.0"?>
<news newsPagePrefix="value goes here">
<content type="latest"/>
</news>
楽しむ。
他のヒント
PHP5 では、 ドキュメントオブジェクトモデル 代わりにクラス。例:
$domDoc = new DOMDocument;
$rootElt = $domDoc->createElement('root');
$rootNode = $domDoc->appendChild($rootElt);
$subElt = $domDoc->createElement('foo');
$attr = $domDoc->createAttribute('ah');
$attrVal = $domDoc->createTextNode('OK');
$attr->appendChild($attrVal);
$subElt->appendChild($attr);
$subNode = $rootNode->appendChild($subElt);
$textNode = $domDoc->createTextNode('Wow, it works!');
$subNode->appendChild($textNode);
echo htmlentities($domDoc->saveXML());
私の答えを見てください ここ. 。として dreamwerx.myopenid.com 指摘、これは可能です シンプルXML, 、 しかし DOM 拡張子 より優れた、より柔軟な方法になるでしょう。さらに、次の 3 番目の方法があります。を使用して XMLライター. 。これは DOM よりもはるかに簡単に使用できるため、XML ドキュメントを最初から作成する私の好みの方法です。
$w=new XMLWriter();
$w->openMemory();
$w->startDocument('1.0','UTF-8');
$w->startElement("root");
$w->writeAttribute("ah", "OK");
$w->text('Wow, it works!');
$w->endElement();
echo htmlentities($w->outputMemory(true));
ところで: ドム を意味する D目 ○オブジェクト Mオーデル。これは、XML ドキュメントへの標準化された API です。
所属していません StackOverflow