php - 更改根 SimpleXML 元素的文本

标签 php xml simplexml

我正在尝试创建一个简单的包装函数,用于为现有的 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/

相关文章:

php - 从另一个浏览器注销一个浏览器 session - LARAVEL 5.2

php - 在 simplexml_load_file 上设置超时

php - 愚蠢的 sprintf() 问题

java - 我的 NavigationDrawer 中的 TextView 文本垂直剪切

java - XMLStreamReader 问题

xml - 如何在 XSLT 中获取行号?

带有变量的 php foreach

php - 如何解析具有ns2元素的xml

php - Eclipse PDT 中的 xDebug 观察点?

php - 使用 str_getcsv 有什么好处?