2

値のない要素と値を持つ子要素の束をxmlファイルに追加する関数があるので、2つの引数$ tag(親ノードの文字列)と$ hash(Array $ elm => $ elm_value)を取るように記述しました。

function addUser($tag, $hash)
    {
        $dom = new DOMDocuemnt();
        $dom->preserveWhiteSpace = false;
        $dom->formatOutput = true;
        $dom->load('file');

        $parent = $dom->createElement($tag);
        foreach($hash as $elm => $value){
            $n = $dom->createElement($elm, $value);
            $parent->appendChild($n);
        }
        $dom->appendChild($parent);

        $dom->save('file');
        return $dom->saveXML();
    }

唯一の問題は$dom->appendChild($parent)、ルート要素の終了タグの後にすべてを追加して、xmlファイルを台無しにすることです。$dom->insertBefore($parent)だから私は同じ結果で試しました。代わりに私は試し$xpath = new DOMXPath($dom); $root = $xpath->query('/')->item(0); $root->appendChild($parent);ました。同じ結果。それから私はルート要素を選択してみました$dom->getElementsByTagName(name of root)->item(0);そしてそれが実際に機能したときに驚いた!しかし、タグ名がわからない場合はどうなりますか?ルート要素を選択して、appendChildまたはinserBeforeを呼び出すと、ルート終了タグの後ではなく前に要素が追加されるようにする別の方法はありますか?

4

1 に答える 1

3

これはうまくいくようです:

初期 XML ファイル -

<!-- test.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <node Id="1">
        <Clicks>click1</Clicks>
    </node>
</root>

PHP -

<?php

function addUser($tag, $hash) {
    $dom = new DOMDocument('1.0');
    $dom->preserveWhiteSpace = false;
    $dom->formatOutput = true;
    $dom->load('test.xml');

    $parent = $dom->createElement($tag);
    $dom->documentElement->appendChild($parent);
    foreach($hash as $elm => $value){
        $n = $dom->createElement($elm);
        $n->appendChild( $dom->createTextNode( $value ) );
        $parent->appendChild($n);
    }

    $dom->save('test.xml');
}

$arr = array( 'name' => 'pushpesh', 'age' => 30, 'profession' => 'SO bugger' );
addUser('user', $arr);

XML ファイルは現在 -

<!-- test.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<root>
  <node Id="1">
    <Clicks>click1</Clicks>
  </node>
  <user>
    <name>pushpesh</name>
    <age>30</age>
    <profession>SO bugger</profession>
  </user>
</root>

お役に立てれば。

于 2012-06-11T10:02:44.743 に答える