需要帮助将新子项附加到php中的现有XML

时间:2012-06-22 22:19:02

标签: php xml dom

这是我的xml文件。我想在所有名为'price'的书中添加一个新元素。我不知道如何遍历所有书籍并在PHP中附加一个孩子。 请帮忙。

<book>
<title>title 1</title>
<author>author 1</author>
</book>

<book>
<title>title 2</title>
<author>author 2</author>
</book>

预期产出:

<book>
<title>title 1</title>
<author>author 1</author>
<price>20</price>
</book>

<book>
<title>title 2</title>
<author>author 2</author>
<price>20</price>
</book>

这是我到目前为止所写的:

            $dom = new DomDocument;

    $dom->preserveWhiteSpace = FALSE;
    $dom->loadXML($xmlFile);
    $books = $dom->getElementsByTagName('book'); // Find Books

    foreach ($books as $book) //go to each book 1 by 1
    {
        $price = $dom->createElement('price');
        $price  = $dom->appendChild($price );

        $text = $dom->createTextNode('20');
        $text = $dom->appendChild($text);
    }
     $dom->saveXML();

1 个答案:

答案 0 :(得分:1)

PHP操作的DOM库是面向对象的,不是功能性/程序性的。

您不会生成DOMDocument然后使用无处不在来调用每个方法,每个节点都有自己的方法。您可以使用DOMDocument创建新元素,但之后使用元素的方法将元素附加到另一个元素。

尝试从PHP docs查看以下类DOMDocument,DOMElement,DOMAttr和DOMText及其共同祖先DOMNode。这应该清楚一些关于你正在处理哪种对象以及你可以使用它的方法。

$xmlFile = '/path/to/filename.xml';
$xmlString = file_get_contents($xmlFile);

$dom = new DomDocument;
$dom->preserveWhiteSpace = FALSE;
$dom->loadXML($xmlString);
$books = $dom->getElementsByTagName('book'); // Find Books

foreach ($books as $book) //go to each book 1 by 1
{
    $price = $dom->createElement('price');
    $book->appendChild($price);

    $text = $dom->createTextNode('20');
    $price->appendChild($text);
}
$dom->saveXML();