0

クライアントのロゴを表示する XML があり、PHP パネルからロゴを追加したいと考えています。現在の XML コードは次のとおりです。

    <item>
        <image><![CDATA[images/clients_5.gif]]></image>
    </item>
    <item>
        <image><![CDATA[images/clients_6.gif]]></image>
    </item>
    <item>
        <image><![CDATA[images/clients_7.gif]]></image>
    </item>
    <item>
        <image><![CDATA[images/clients_8.gif]]></image>
    </item>
    <item>
        <image><![CDATA[images/clients_9.gif]]></image>
    </item>
    <item>
        <image><![CDATA[images/clients_10.gif]]></image>
    </item>
    <item>
        <image><![CDATA[images/clients_11.gif]]></image>
    </item>
    <item>
        <image><![CDATA[images/clients_12.gif]]></image>
    </item>
    <item>
        <image><![CDATA[images/clients_13.gif]]></image>
    </item>
    <item>
        <image><![CDATA[images/clients_14.gif]]></image>
    </item>
    <item>
        <image><![CDATA[images/clients_15.gif]]></image>
    </item>

    <footer><![CDATA[copyright evolve entertainment and marketing solutions, 2009]]></footer>

</clients>

PHPコードは次のとおりです。

if(!empty($_FILES["logo"]["name"]))
{
    $handle = new Upload($_FILES["logo"]);  
    $imgId = uniqid();      
    if ($handle->uploaded) 
    {
        $handle->file_name_body_pre =   $imgId;
        $handle->image_resize            = false;
        $handle->Process(ROOT_PATH.'images/');
        $handle->processed;
    }
    $imgName = $imgId.$_FILES["logo"]['name'];

    $parent_path = "//main";
    $next_path = "//main/clients/footer"; 
    $xpath = new DomXPath($doc); 
    $parent = $xpath->query($parent_path); 
    $next = $xpath->query($next_path);



    $imageNode = $doc->createElement('image');
    $cdata=$doc->createCDATASection($imgName);
    $imageNode = $imageNode->appendChild($cdata);

    //$parent->item(0)->insertBefore($imageNode, $next->item(0)); 

    $section = $doc->insertBefore($imageNode,$next->item(0));

    $doc->save(XML_PATH.'clients.xml');

フッターの前または子ノードの上部に新しいノードを追加したい場所。上記のコードを試してみると、次のようなエラーが表示されます: Uncaught exception 'DOMException' with message 'Not Found Error'

4

1 に答える 1

0

メッセージ「Not Found Error」を伴うキャッチされない例外「DOMException」

これは、ノードが見つからないことを意味します。行を指定しませんでしたが、次のようになります。

$section = $doc->insertBefore($imageNode, $next->item(0));

そして、これは問題です。$docはルート要素ですが、の親要素ではありません$next->item(0)。これを機能させるには、refnode (ここでは: $next->item(0)) が - の子である必要があります$docが、そうではありません。

代わりに、以下に単純ですが広範な例を示します。これにより、より適切なコードが得られます。

$refnode = $next->item(0);
$parent  = $refnode->parentNode;
$section = $parent->insertBefore($imageNode, $refnode);

確かにそれほど多くの変数を使用する必要はありませんが、例はあなたを導くはずです。特に、$refnode->parentNode子の前に挿入する正しいノードを取得することを確認してください。

はい、これは間違っています。

$imageNode = $imageNode->appendChild($cdata);

使用するすべての機能について、マニュアルを再度確認する必要があります。これらの関数が何を返すかを確実に把握するためです。

于 2013-02-16T17:03:20.607 に答える