You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP爬虫写入XML报错:DOMNode::appendChild()参数类型错误

解决DOMNode::appendChild()的TypeError问题

嘿,这个错误我之前爬取数据生成XML时也踩过坑!问题核心很清晰:你直接把字符串传给了appendChild(),但这个方法只认DOMNode类型的对象,普通字符串根本不被它接受。

错误原因拆解

DOMDocument是基于节点树的XML处理API,不管是元素标签还是文本内容,都得是节点对象。你想把$data['img-code']这种字符串直接塞进去,自然会触发类型错误。

修复方案:用createTextNode()转成文本节点

你需要先把要写入的字符串转换成DOM文本节点,再把这个节点挂到对应的XML元素上。结合你的代码,完整的修复示例如下:

// 你的原始数据数组
$data = array(
    'img-code' => $element->img,
    'ean' => $eant,
    'desc' => $description
);

// 初始化DOMDocument
$doc = new DOMDocument();
$doc->formatOutput = true; // 可选:让生成的XML格式化更美观

// 创建根节点(比如<products>)
$root = $doc->createElement('products');
$doc->appendChild($root);

// 创建单个商品节点
$product = $doc->createElement('product');
$root->appendChild($product);

// 逐个处理数据字段:先创建元素,再创建文本节点,最后挂载
// 处理img-code
$imgCode = $doc->createElement('img-code');
$imgCodeText = $doc->createTextNode($data['img-code']);
$imgCode->appendChild($imgCodeText);
$product->appendChild($imgCode);

// 处理ean
$ean = $doc->createElement('ean');
$eanText = $doc->createTextNode($data['ean']);
$ean->appendChild($eanText);
$product->appendChild($ean);

// 处理desc
$desc = $doc->createElement('desc');
$descText = $doc->createTextNode($data['desc']);
$desc->appendChild($descText);
$product->appendChild($desc);

// 保存或输出XML
$doc->save('output.xml');
// 或者直接输出:echo $doc->saveXML();

简化写法小技巧

如果觉得每次都写createElement+createTextNode太繁琐,可以封装个小函数:

function addElementWithText($doc, $parent, $tagName, $text) {
    $element = $doc->createElement($tagName);
    $element->appendChild($doc->createTextNode($text));
    $parent->appendChild($element);
}

// 调用起来就简洁多了
addElementWithText($doc, $product, 'img-code', $data['img-code']);
addElementWithText($doc, $product, 'ean', $data['ean']);
addElementWithText($doc, $product, 'desc', $data['desc']);

这样就能完美避开那个类型错误,顺利把爬虫抓取的数据写入XML文件啦!

内容的提问来源于stack exchange,提问作者Jakub Jóźwiak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:54:09