使用SimpleXML从头创build一个XML对象

是否有可能使用PHP的SimpleXML函数从头开始创build一个XML对象? 通过函数列表,可以将现有的XMLstring导入到一个可以操作的对象中,但是如果我只是想从头开始编程生成XML对象,那么最好的方法是什么?

我发现你可以使用simplexml_load_string()并传入你想要的根string,然后你可以通过添加子项来操作一个对象…虽然这看起来像是一种破解,因为我必须实际上可以在加载之前将一些XML硬编码到string中。

我已经使用DOMDocument函数完成了这个工作 ,虽然它有点令人困惑,因为我不确定DOM是如何创build一个纯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指出的那样,使用SimpleXML可以做到这一点,但是DOM扩展将是更好更灵活的方式。 另外还有第三种方法:使用XMLWriter 。 它比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代表的是对象模型; 这是XML文档的标准化API。