使用 SimpleXML 从头开始创建 XML 对象

2022-08-30 08:18:07

是否可以使用 PHP 的 SimpleXML 函数从头开始创建 XML 对象?通过查看函数列表,有一些方法可以将现有的 XML 字符串导入到一个对象中,然后可以对其进行操作,但是如果我只是想从头开始以编程方式生成 XML 对象,那么最好的方法是什么?

我发现你可以使用simplexml_load_string()并传入你想要的根字符串,然后你有一个可以通过添加子项来操作的对象......尽管这似乎是一种黑客攻击,因为我必须在加载字符串之前将一些XML硬编码到字符串中。

我已经使用DOMDocument函数完成了它,尽管它有点令人困惑,因为我不确定DOM与创建纯XML文档有什么关系......所以也许它只是名字不好:-)


答案 1

当然可以。例如。

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

玩得愉快。


答案 2

在 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());

推荐