使用SimpleXML从头开始创建XML对象
时间:2020-03-06 14:49:11 来源:igfitidea点击:
是否可以使用PHP的SimpleXML函数从头开始创建XML对象?浏览功能列表,可以通过一种方法将现有的XML字符串导入一个对象,然后可以对其进行操作,但是,如果我只是想从头开始以编程方式生成XML对象,什么是最好的方法?
我发现我们可以使用simplexml_load_string()并传入所需的根字符串,然后我们就可以通过添加子代来操纵一个对象……尽管这看起来有点像hack,因为我必须实际上,在可以加载之前,将一些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中,我们应该改用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());
请在这里查看我的答案。正如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。