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');

我想在页脚之前或子节点的顶部添加新节点。当我尝试上面的代码时,它会出现错误:未捕获的异常 'DOMException' 和消息'未找到错误'

4

1 回答 1

0

未捕获的异常“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 回答