2017-05-07 77 views
2

我需要爲存儲在數據庫中的xml元素添加一個新屬性。這不是一個完整的XML,而只是數據庫中的XML元素。如何在不使用xml頭的情況下向PHP中的XML元素添加屬性?

當我這樣做,

$node_xml = simplexml_load_string('<node name="nodeA">this is a node</node>'); 
$node_xml->addAttribute('newattrib', "attribA"); 
$res_xml = $node_xml->asXML(); 

我得到$res_xml爲:

"<?xml version=\"1.0\"?>\n<node name=\"nodeA\" newattrib=\"attribA\">this is a node</node>\n" 

如何消除<?xml version=\"1.0\"?>部分沒有做一個字符串操作?

+0

的[刪除XML版本標籤時在PHP創建XML]可能的複製(http://stackoverflow.com/questions/5947695/remove-xml-version-在php中創建標籤時) – splash58

+0

該問題/答案不涉及添加屬性。 – devnull

+0

@ splash58看到了。但不能在字符串操作中添加屬性 – devnull

回答

1

添加根級別,然後獲取節點,但不是完整的xml。在這種情況下,頭也不會在這裏我們使用DOMDocument用於在標籤設置屬性相呼應

$string = '<node name="nodeA">this is a node</node>'; 
$node_xml = simplexml_load_string('<root>'. $string .'</root>'); 
$node = $node_xml->children()[0]; 
$node->addAttribute('newattrib', "attribA"); 

echo $res_xml = $node->asXML(); // <node name="nodeA" newattrib="attribA">this is a node</node> 

demo

+0

謝謝。這是一個聰明的解決方法。 – devnull

+0

不客氣! – splash58

0

<?php 

ini_set('display_errors', 1); 
libxml_use_internal_errors(true); 
$domObject = new DOMDocument(); 
$domObject->loadHTML('<node name="nodeA">this is a node</node>',LIBXML_HTML_NOIMPLIED|LIBXML_HTML_NODEFDTD); 
$result=$domObject->getElementsByTagName("node")->item(0); 
$result->setAttribute("newattrib","attribA"); 
echo $result->ownerDocument->saveHTML(); 

輸出:<node name="nodeA" newattrib="attribA">this is a node</node>

相關問題