2009-07-21 213 views
2

SimpleXMLElement的「addChild」方法看起來應該是正確的選擇,但它顯然只需要表示新子標記名的字符串。有沒有辦法將PHP SimpleXMLElement添加到另一個SimpleXMLElement?

存在用於引用樹的節點並設置它們的對象標記符號,例如, $ simpleXMLNode-> child = value,但似乎只適用於簡單的文本/數字值。如果我嘗試以下方法:

$s = new SimpleXMLElement('<root/>'); 
$t = new SimpleXMLElement('<child/>'); 
$s->a = $t; 
echo $s->asXML() 

我得到:

<?xml version="1.0"?> 
<root><a></a></root> 

時,我希望:

<?xml version="1.0"?> 
<root><a><child/></a></root> 

我想$ T轉換爲字符串,然後將它的(在剝離XML聲明後):

$s->a = substr($t->asXML(),22) 

但是,這產生:

<?xml version="1.0"?> 
<root><a>&lt;child/&gt;</a></root> 

再次,不是我所希望的。

是否有一種使用SimpleXML完成此類事情的典型方法?

+0

可能重複[PHP - SimpleXML - AddChild與另一個SimpleXMLElement](http://stackoverflow.com/questions/4778865/php-simplexml-addchild-with-another-simplexmlelement) – Ben 2017-01-18 11:57:27

回答

7

嘿,未知。你必須使用你的SimpleXML對象的DOMElement接口來實現這一點。

<?php 

$s = new SimpleXMLElement('<root/>'); 
$t = new DOMElement('child'); 

$dom = dom_import_simplexml($s); 
$dom->appendChild($t); 

echo $s->asXML(); 
// <root><child/></root> 

如果您需要更具體的細節,請告訴我。在dom_import_simplexml()方法的文檔和註釋中也有幾個示例:http://php.net/dom_import_simplexml

1

我不確定這是否會有所幫助,但是您也可以擴展SimpleXML以按預期工作。這是我爲bLibrary Xml課所做的一個項目。您可以查看它以使SimpleXml按照您的預期工作。

相關問題