2015-04-17 111 views
1

我有一個url返回一個XML,但我有一些問題來提取「鏈接」元素。Symfony 2與Symfony Component DomCrawler Crawler測試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> 

我需要

Symfony\Component\DomCrawler\Crawler 

這是我的測試,以測試它:

$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 

「鏈接」 是一個保留字?

+0

你能檢查出什麼''$物品─> filterXPath(「//鏈接」)''包含? –

+0

它返回一個crowler對象: '代碼 對象(Symfony的\元器件\ DomCrawler \履帶)#1968(5){ [ 「URI」:保護] => NULL [ 「defaultNamespacePrefix」:「的Symfony \ Component \ DomCrawler \ Crawler「:private] => } } [」Component \ DomCrawler \ Crawler「:private] => } (1){ [「0000000049a37b5b000000002da5082f」] =>「baseHref」:「Symfony \ Component \ DomCrawler \ Crawler」:private] => NULL [「storage」:「SplObjectStorage」:private] => 陣列(2){ [ 「OBJ」] => 對象(一個DOMElement)#1970(0){ } [ 「INF」] => NULL } } }' – Vega

+0

您的RSS XML代碼是破 – VMAtm

回答

2

你的XML被打破:

  1. 你不必關閉通道節點</channel>
  2. 你沒有關閉RSS節點</rss>

這裏被修正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> 

然後,->extract()返回提取值數組。所以,你不應該直接嘗試看看其包含但得到的第一個元素,做你的測試:

$this->assertContains("my title", $titles[0]); 
// ... 
$this->assertContains("example.org", $links[0]); 
+0

是的,對不起,我錯在複製粘貼代碼,XML是 和 問題正確只在$物品─> filterXPath(「//鏈接」)等元素的作品 – Vega

+1

@Vega我試着與我發佈的XML和使用'[0]',它爲我工作..你確定你的XML?什麼'$ this-> client-> getResponse() - > getContent()'說在你的' - > get('? – j0k

+0

@jOk它工作!好! – Vega

相關問題