是否可以使用PHP的SimpleXML函数从头开始创建XML对象?通过功能列表,可以将现有的XML字符串导入到可以操作的对象中,但如果我只是想从头开始以编程方式生成XML对象,那么最好的方法是什么?
我发现你可以使用simplexml_load_string()并传入你想要的根字符串,然后你有一个你可以通过添加子项来操作的对象......虽然这看起来像是一种黑客攻击,在加载之前,我必须将一些XML硬编码到字符串中。
我使用DOMDocument functions完成了它,虽然它有点令人困惑,因为我不确定DOM与创建纯XML文档有什么关系......所以也许它的名字很糟糕: - )
答案 0 :(得分:134)
当然可以。例如
<?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>
玩得开心。
答案 1 :(得分:21)
在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());
答案 2 :(得分:16)
请参阅我的回答here。正如dreamwerx.myopenid.com指出的那样,可以使用SimpleXML执行此操作,但DOM extension将是更好,更灵活的方式。此外,还有第三种方法:使用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代表 D 纪念 O bject M odel;这是XML文档中的标准化API。