我有一个XML设置此SimpleXMLElement对象类似于以下...

$xml = <<<EOX
<books>
    <book>
        <name>ABCD</name>
    </book>
</books>
EOX;

$sx = new SimpleXMLElement( $xml );

现在我有一个类名为书包含的信息。大约每本书。同样的类也可以吐出图书的信息。在XML格式的类似上述(嵌套块)..例如,

$book = new Book( 'EFGH' );
$book->genXML();

... will generate
<book>
    <name>EFGH</name>
</book>

现在,我试图找出一个办法让我可以用这个生成的XML块,并追加为使得现在的孩子看起来...例如..

// Non-existent member method. For illustration purposes only.
$sx->addXMLChild( $book->genXML() );    

...XML tree now looks like:
<books>
    <book>
        <name>ABCD</name>
    </book>
    <book>
        <name>EFGH</name>
    </book>
</books>

这是什么文件我已阅读的SimpleXMLElement,的addChild()将无法完成这件事对你,因为它不支持XML数据的标记值。

有帮助吗?

解决方案

两种解决方案。首先,你的libxml / DOM文档/的SimpleXML的帮助下做到这一点:你必须输入你的$sx对象的 DOM 时,创建一个DOMDocumentFragment和使用 DOMDocumentFragment::appendXML()

$doc = dom_import_simplexml($sx)->ownerDocument;

$fragment = $doc->createDocumentFragment();     
$fragment->appendXML($book->genXML());
$doc->documentElement->appendChild($fragment);

// your original $sx is now already modified.

请参阅在线演示

您还可以从的SimpleXMLElement 延伸,并且添加一个提供这种方法。使用这种专门的对象,然后将允许您创建轻松以下内容:

$sx = new MySimpleXMLElement($xml);

$sx->addXML($book->genXML());

另一种解决方案是使用已经具有此功能的内置如 SimpleDOM 的XML库。你抢 SimpleDOM 和使用insertXML(),它的工作方式类似于addXMLChild()方法你进行描述。

include 'SimpleDOM.php';

$books = simpledom_load_string(
    '<books>
        <book>
            <name>ABCD</name>
        </book>
    </books>'
);

$books->insertXML(
    '<book>
        <name>EFGH</name>
    </book>'
);

其他提示

在我的代码有一个看看:

$doc = new DOMDocument();       
$doc->loadXML("<root/>");       

$fragment = $doc->createDocumentFragment();     
$fragment->appendXML("<foo>text</foo><bar>text2</bar>");
$doc->documentElement->appendChild($fragment);

echo $doc->saveXML();

此通过添加XML片段修改XML文档。 在线演示

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top