2

SimpleXMLElement の「addChild」メソッドは正しい選択のようですが、新しい子のタグ名を表す文字列しか取得しないようです。

ツリーのノードを参照して設定するためのオブジェクトっぽい表記法があります。次のことを試してみると:

$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 でこの種のことを達成する典型的な方法はありますか?

4

2 に答える 2

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

于 2009-07-21T03:44:37.627 に答える
1

これが役立つかどうかはわかりませんが、期待どおりに機能するように SimpleXML を拡張することもできます。これは私がbLibrary Xmlクラスのために取り組んだプロジェクトです。これを見て、期待どおりに動作するように SimpleXml を調整できます。

于 2009-08-11T00:35:48.683 に答える