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。它比 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 ocument O bject M odel ;这是 XML 文档的标准化 API。

于 2008-09-27T10:01:55.237 回答