- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我需要在 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/
我是一名优秀的程序员,十分优秀!