2009-07-21 7 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

答えて

7

ちょっと不明。これを実現するには、DOMElementインターフェイスをSimpleXMLオブジェクトに使用する必要があります。

<?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を見て、期待どおりに動作させることができます。

関連する問題