0

これは私のxmlファイルです。「価格」という新しい要素をすべての本に追加したいと思います。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();
4

1 に答える 1

2

操作用のPHPライブラリは、DOM機能的/手続き的ではなく、オブジェクト指向です。

生成してからどこでもDOMDocument使用してすべてのメソッドを呼び出すのではなく、各ノードに独自のメソッドがあります。DOMDocumentを使用して新しい要素を作成しますが、その後、要素のメソッドを使用して要素を別の要素に追加します。

次のクラスDOMDocument、DOMElement、DOMAttr、DOMText、およびPHPドキュメントからのそれらの共通の祖先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();
于 2012-06-22T22:47:57.863 に答える