2011-07-25 46 views
3

我正在尝试创建一个简单的包装函数,用于在现有的Flash应用程序中输出XML中的错误。我已经读过SimpleXMLElement不一定用于创建一个新的XML文档,但它迄今为止工作正常,我基本上替换了连接字符串。更改根文本SimpleXML元素

到现在为止,我没有任何问题迭代和添加/修改attribues,价值观等。在这个例子中,我想看到我的输出是这样的:

<ERROR>There is an error</ERROR> 

但我看到这个:

<ERROR> 
    <ERROR>There is an error</ERROR> 
</ERROR> 

下面的代码:

​​

看来,使用$obj->node语法创建一个子节点。我可以实例化一个SimpleXMLElement的唯一方法是通过传递父节点。

回答

5

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

+1

感谢戈登!太棒了! – kenitech