2011-07-25 74 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