1

我有一个返回 xml 的 url,但我在提取“链接”元素时遇到了一些问题。

<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

“链接”是保留字?

4

1 回答 1

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]);
于 2015-04-17T12:30:13.443 回答