0

こんにちは、新しいファイルを作成して保存しない場合は、既存のファイルにデータを追加しようとしています。代わりに、私のコードはデータを 1 回だけ保存します。次のデータ セットは最初のデータ セットを上書きするだけです。私が間違っていることを理解するのを手伝ってください....

コメントの後、コードを変更しましたが、最終的には 警告: DOMDocument::load() [domdocument.load]: Extra content at the end of the document in になります

    function toXml($reg)
    {

        $xmlFile = "customers.xml";
        $doc = new DomDocument('1.0');
        $doc->load( $xmlFile);

        $cusCart = $doc -> createElement('cusCart');
        //$cusCart = $doc->appendChild($cusCart);

        foreach ($reg as $item => $val )

        {
            $customer = $doc->createElement('customer');
            $customer = $cusCart->appendChild($customer);

            $cusId = $doc->createElement('cusId');
            $cusId = $customer->appendChild($cusId);
            $value = $doc->createTextNode($item);
            $value = $cusId->appendChild($value);


            $fName = $doc->createElement('fName');
            $fName = $customer->appendChild($fName);
            $value1 = $doc->createTextNode($val["fName"]);
            $value1 = $fName->appendChild($value1);

            $lName = $doc->createElement('lName');
            $lName = $customer->appendChild($lName);
            $value2 = $doc->createTextNode($val["lName"]);
            $value2 = $lName->appendChild($value2);

            $phone = $doc->createElement('phone');
            $phone = $customer->appendChild($phone);
            $value3 = $doc->createTextNode($val["phone"]);
            $value3 = $phone->appendChild($value3);


            $email = $doc->createElement('email');
            $email = $customer->appendChild($email);
            $value4 = $doc->createTextNode($val["email"]);
            $value4 = $email->appendChild($value4);


            $pwd = $doc->createElement('pw');
            $pwd = $customer->appendChild($pwd);
            $value5 = $doc->createTextNode($val["pw"]);
            $value5 = $pwd->appendChild($value5);


        }

        $cusCart = $doc->appendChild($cusCart);     
        $doc->save($xmlFile);

        $strXml = $doc->saveXML();
        echo("<br>----- DATA RECOREDED!!! ----");

        return $strXml;
    }
4

3 に答える 3

0

子ノードと属性は、親に追加する前にノードに追加する必要があります。以下をお試しください

function toXml($reg){
    $doc = new DomDocument('1.0');
    $doc->load( 'cusXML.xml');

    $cusCart = $doc -> createElement('cusCart');
    foreach ($reg as $item => $val )
    {
        $customer = $doc->createElement('customer');

        // Create cusId node
        $cusId = $doc->createElement('cusId');
        $value = $doc->createTextNode($item);
        $value = $cusId->appendChild($value);
        $cusId = $customer->appendChild($cusId);

        // Create pw node
        $pwd = $doc->createElement('pw');
        $value5 = $doc->createTextNode($val["pw"]);
        $value5 = $pwd->appendChild($value5);
        $pwd = $customer->appendChild($pwd);

        $customer = $cusCart->appendChild($customer);
    }

    $cusCart = $doc->appendChild($cusCart);

    if(file_exists('cusXML.xml')) { $doc->save("cusXML.xml"); }
    else{ $doc->save("cusXML.xml"); }

    $strXml = $doc->saveXML();
    echo("<br>----- DATA RECOREDED!!! ----");
    return $strXml;
}
于 2013-10-21T01:34:23.443 に答える
0

XML 文書の末尾に追加textまたは追加がある場合があります。tagお気に入り

<?xml version="1.0"?>
<document>
    <article>sample</article>
</document>
</xml>

したがって、root要素の後の他のテキストを削除するだけです。上記の例では、ルート要素は</document>で、他のテキストまたは要素は</xml>です。

XML を動的に生成しているため、さらに処理する前にまず XML を確認し、ルート要素が終了した後に追加のテキストを識別します。

于 2013-10-22T12:20:45.643 に答える