PHP:在父级内创建新节点

时间:2010-01-10 23:16:40

标签: php xml dom

我有一个调用的根XML节点,我正在尝试添加一个新的子节点,但是我收到了错误。里面还有孩子。这是我的代码:

    $xml = new DomDocument();
    $xml->load(X_ASSETS);
    $xml->formatOutput = true;
    $new_id = $this->getNewAssetId();
    // Root
    $xpath = new DOMXPath($xml);
    $assets = $xpath->query('assets');
    $xml_assets = $assets->item(0);
    $xml_root = $xml->createElement('asset');
    // Asset Name
    $xml_name = $xml->createElement('name');
    $xml_name->nodeValue = $clean_name;
    $xml_root->appendChild($xml_name);
    // Asset URL
    $xml_url = $xml->createElement('url');
    $xml_url->nodeValue = '/'.$name;
    $xml_root->appendChild($xml_url);
    // Asset ID
    $xml_id = $xml->createElement('id');
    $xml_id->nodeValue = $new_id;
    $xml_root->appendChild($xml_id);


    // Create our document and save
    $xml_assets->appendChild($xml_root);
    $xml->save(X_ASSETS);

运行时出现以下错误:

致命错误:在第88行的/home/websites/zed_x/core/includes/x.inc中的非对象上调用成员函数appendChild()

有谁知道我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

不知何故,你的$xml_assets不是一个对象,因此你无法调用该函数:

$xml_assets->appendChild($xml_root);

您确定以下命令会返回一个对象吗?

$xml_assets = $assets->item(0);

测试它:

if(is_object($xml_assets))
{
    echo "Object Here!";
}

这可能是构建代码的好方法,因此您可以捕获错误

// .... stuff .....
$xml_assets = $assets->item(0);

// ... more stuff ....

// Check for Object
if(!is_object($xml_assests))
{
     die("No Object Created!");
}

$xml_assets->appendChild($xml_root);
$xml->save(X_ASSETS);

// .... more stuff .....