Php Symfony 2使用Symfony\Component\domclawler\Crawler测试xml
我有一个返回xml的url,但在提取“link”元素时遇到了一些问题 以下是我的测试:Php Symfony 2使用Symfony\Component\domclawler\Crawler测试xml,php,xml,unit-testing,symfony,domcrawler,Php,Xml,Unit Testing,Symfony,Domcrawler,我有一个返回xml的url,但在提取“link”元素时遇到了一些问题 以下是我的测试: $crawler = $this->client->get('/my-feed'); $items = $crawler->filterXPath('//channel/item'); $this->assertGreaterThanOrEqual(1, $items->count()); // ok pass // ... $titles = $items->filt
$crawler = $this->client->get('/my-feed');
$items = $crawler->filterXPath('//channel/item');
$this->assertGreaterThanOrEqual(1, $items->count()); // ok pass
// ...
$titles = $items->filterXPath('//title')->extract(array('_text'));
$this->assertContains("my title", $titles); // ok pass
// ...
$links = $items->filterXPath('//link')->extract(array('_text'));
$this->assertContains("example.org", $links); // KO!!! don't pass
var_dump($links); // empty string
“链接”是保留字?您的XML已断开:
<rss xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
<channel>
<item>
<id>123</id>
<title>my title</title>
<link>http://example.org</link>
</item>
</channel>
</rss>
你能看看
$items->filterXPath('//link')
包含什么吗?它返回一个crowler对象:code对象(Symfony\Component\domclawler\Crawler)#1968(5){[“uri”:protected]=>NULL[“defaultNamespacePrefix”:“Symfony\Component\domclawler\Crawler”:private]=>string(7)“default”[“namespaces”:“Symfony\Component\DomCrawler\Crawler:private]=>array(0){}[“baseHref”:“Symfony\Component\DomCrawler\Crawler:private]=>NULL[“存储”:“SplObjectStorage”:private]=>array(1){[[00000000 49A37B5B000000002DA5082F]=>array(2){[“obj”]=>object(doElement){1970(0)}[“inf”=>NULL}
您的RSS xml代码是brokenYes,很抱歉我在复制粘贴代码中出错,xml是正确的,问题只出现在$items->filterXPath('//link')其他元素中works@Vega我试过使用我发布的xml并使用了[0]
,它对我很有效。你确定你的xml吗?什么是$this->client->getResponse()->getContent()
在你得到(?@Vega很高兴听到这个消息!你现在可以接受答案:)
$crawler = $this->client->get('/my-feed');
$items = $crawler->filterXPath('//channel/item');
$this->assertGreaterThanOrEqual(1, $items->count()); // ok pass
// ...
$titles = $items->filterXPath('//title')->extract(array('_text'));
$this->assertContains("my title", $titles); // ok pass
// ...
$links = $items->filterXPath('//link')->extract(array('_text'));
$this->assertContains("example.org", $links); // KO!!! don't pass
var_dump($links); // empty string
<rss xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
<channel>
<item>
<id>123</id>
<title>my title</title>
<link>http://example.org</link>
</item>
</channel>
</rss>
$this->assertContains("my title", $titles[0]);
// ...
$this->assertContains("example.org", $links[0]);