79

PHP の SimpleXML 関数を使用して XML オブジェクトをゼロから作成することは可能ですか? 関数リストを見ると、既存の XML 文字列をオブジェクトにインポートして操作できるようにする方法がありますが、XML オブジェクトをプログラムで最初から生成したい場合、どのような方法が最適でしょうか?

simplexml_load_string() を使用して、必要なルート文字列を渡すと、子を追加して操作できるオブジェクトを取得できることがわかりました...ただし、これは一種のハックのように思えますが、ロードする前に、実際に一部の XML を文字列にハードコーディングします。

私はDOMDocument関数を使用してそれを行いましたが、DOMが純粋なXMLドキュメントの作成に何をしなければならないかわからないため、少し混乱しています...おそらく名前が悪いだけです:-)

4

3 に答える 3

145

できますよ。例えば。

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

楽しむ。

于 2008-09-27T07:42:05.757 に答える
22

PHP5 では、代わりにDocument Object Modelクラスを使用する必要があります。例:

$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());
于 2008-09-27T08:50:01.290 に答える
16

ここで私の答えを見てください。dreamwerx.myopenid.com指摘しているように、SimpleXMLを使用してこれを行うことは可能ですが、DOM 拡張の方が優れた柔軟な方法です。さらに、 XMLWriterを使用する 3 番目の方法があります。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));

ところで、DOMはDocument O object Modelの略です。これは、XML ドキュメントへの標準化された API です。

于 2008-09-27T10:01:55.237 に答える