我正在尝试创建一个简单的包装函数,用于为现有的 Flash 应用程序以 XML 格式输出我的错误。我已经读到 SimpleXMLElement
不一定用于创建新的 XML 文档,但到目前为止它对我来说工作正常,我基本上是在替换连接的字符串。
到目前为止,我在迭代和添加/修改属性、值等方面没有遇到任何问题。在这个示例中,我希望看到我的输出如下所示:
<ERROR>There is an error</ERROR>
但我看到了这个:
<ERROR>
<ERROR>There is an error</ERROR>
</ERROR>
代码如下:
$msg = 'There is an error';
$xmlstr = "<ERROR></ERROR>";
$sxml = new SimpleXMLElement($xmlstr);
$sxmlErr = $sxml->ERROR = $msg;
echo $sxml->asXML();
似乎使用$obj->node
语法创建了一个子节点。我可以实例化 SimpleXMLElement
的唯一方法是传递父节点。
最佳答案
结果是预期的。你的$sxml
是根节点,例如<ERROR/>
- 使用对象运算符将导航到子元素(如果存在)或添加该名称的新元素(如果不存在)。由于根 ERROR 节点下没有 ERROR 元素,因此添加了它。
改为通过索引访问根节点:
$msg = 'There is an error';
$xmlstr = "<ERROR></ERROR>";
$sxml = new SimpleXMLElement($xmlstr);
$sxmlErr = $sxml[0] = $msg;
echo $sxml->asXML();
不落入根元素陷阱的一个好习惯是使用根元素的名称作为保存它的变量名称,例如
$error = new SimpleXMLElement('<ERROR/>');
$error[0] = 'There is an Error';
echo $error->asXML();
另见 A simple program to CRUD node and node values of xml file
关于php - 更改根 SimpleXML 元素的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6819306/