更改根SimpleXML元素的文本

时间:2011-07-25 16:28:49

标签: 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的唯一方法是传递父节点。

1 个答案:

答案 0 :(得分:6)

结果是预期的。您的$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