更改根SimpleXML元素的文本

ken*_*ech 3 php xml simplexml

我正在尝试创建一个简单的包装函数,用于在现有Flash应用程序中输出XML错误.我已经读过,这SimpleXMLElement不一定是用于创建一个新的XML文档,但到目前为止它对我来说工作正常,我基本上替换了连接的字符串.

到目前为止,我已经没有问题迭代和添加/修改属性,值等.在这个例子中我想看到我的输出如下所示:

<ERROR>There is an error</ERROR>
Run Code Online (Sandbox Code Playgroud)

但我看到了这个:

<ERROR>
  <ERROR>There is an error</ERROR>
</ERROR>
Run Code Online (Sandbox Code Playgroud)

这是代码:

$msg = 'There is an error';    
$xmlstr = "<ERROR></ERROR>";
$sxml = new SimpleXMLElement($xmlstr);
$sxmlErr = $sxml->ERROR = $msg;
echo $sxml->asXML();
Run Code Online (Sandbox Code Playgroud)

似乎使用$obj->node语法创建了一个子节点.我可以实例化a的唯一方法SimpleXMLElement是传递父节点.

Gor*_*don 7

结果是预料之中的.您$sxml是根节点,例如<ERROR/>- 使用对象运算符将导航到子元素(如果存在)或添加该名称的新元素(如果它不存在).由于根ERROR节点下没有ERROR元素,因此会添加它.

通过索引访问根节点:

$msg = 'There is an error';
$xmlstr = "<ERROR></ERROR>";
$sxml = new SimpleXMLElement($xmlstr);
$sxmlErr = $sxml[0] = $msg;
echo $sxml->asXML();
Run Code Online (Sandbox Code Playgroud)

不属于根元素陷阱的一个好习惯是使用根元素的名称作为保存它的变量名称,例如

$error = new SimpleXMLElement('<ERROR/>');
$error[0] = 'There is an Error';
echo $error->asXML();
Run Code Online (Sandbox Code Playgroud)

另请参阅CRUD节点的简单程序和xml文件的节点值