gpt4 book ai didi

xml - 如何将 xml 节点添加到 symfony Crawler()

转载 作者:数据小太阳 更新时间:2023-10-29 01:59:20 25 4
gpt4 key购买 nike

我需要在 saymfony 中管理 xml 文档。

我可以毫无问题地将 xml 放入 Crawler() 实例,修改现有节点,然后将 xml 放入文件中。

但我无法添加新节点。

当我尝试使用 appendChild 方法向父节点添加一个新节点时,我得到:

wrong document error

当我尝试向爬虫添加方法时,我得到了:

impossible to add two differents sources to the crawler?

如何将简单节点添加到现有爬虫?

感谢您的回复

最佳答案

我遇到了和你类似的问题,我试过了:

$crawler=new Crawler($someHtml);
$crawler->add('<element />');

得到了

Attaching DOM nodes from multiple documents in the same crawler is forbidden.

对于 DOMDocument,您可以使用它自己的 createElement 方法来创建节点,然后使用 appendChild 将它们附加到文档中管他呢。但是由于 Crawler 好像没有createElement之类的东西,我想到的解决办法是用原生的dom文档初始化Crawler,用Crawler做任何你想做的事,然后使用当您需要添加节点时,将 dom 文档作为“节点工厂”。

我的特殊情况是我需要检查文档是否有 head,如果没有则添加一个(特别是添加到 body 标签上方):

        $doc = new \DOMDocument;
$doc->loadHtml("<html><body bgcolor='red' /></html>");
$crawler = new Crawler($doc);
if ($crawler->filter('head')->count() == 0) {
//use native dom document to make a head
$head = $doc->createElement('head');
//add it to the bottom of the Crawler's node list
$crawler->add($head);
//grab the body
$body = $crawler
->filter('body')
->first()
->getNode(0);
//use insertBefore (http://php.net/manual/en/domnode.insertbefore.php)
//to get the head and put it above the body
$body->parentNode->insertBefore($head, $body);
}

echo $crawler->html();

产量

<head></head>
<body bgcolor="red"></body>

这看起来有点复杂,但它确实有效。我正在处理 HTML,但我想 XML 解决方案几乎是一样的。

关于xml - 如何将 xml 节点添加到 symfony Crawler(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40862303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com