这是我的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();
答案 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();