我对PHP有些新意,但鉴于我的情况,我无法真正理解我在做错的事情 .
问题:我试图通过Reddit获取XML对象/元素内的字符串中某个HTML元素的href(如果您访问此页面,它将是视频的实际链接 - 而不是reddit链接,但是外部youtube链接或其他 - 没有别的) .
这是我到目前为止的代码(代码更新):
更新:循环狂热!得到了所有的href,但我现在正试图将它们存储在一个全局数组中,以访问此函数之外的随机数据 .
function getXMLFeed() {
echo "<h2>Reddit Items</h2><hr><br><br>";
//$feedURL = file_get_contents('https://www.reddit.com/r/videos/.xml?limit=200');
$feedURL = 'https://www.reddit.com/r/videos/.xml?limit=200';
$xml = simplexml_load_file($feedURL);
//define each xml entry from reddit as an item
foreach ($xml -> entry as $item ) {
foreach ($item -> content as $content) {
$newContent = (string)$content;
$html = str_get_html($newContent);
foreach($html->find('table') as $table) {
$links = $table->find('span', '0');
//echo $links;
foreach($links->find('a') as $link) {
echo $link->href;
}
}
}
}
}
XML代码:http://pasted.co/0bcf49e8
如果可以这样做,我还包括JSON;我只是喜欢XML:http://pasted.co/f02180db
这几乎就是所有的代码 . 虽然,这是我尝试使用DOMDocument的另一篇文章(废弃它) .
foreach ($item -> content as $content) {
$dom = new DOMDocument();
$dom -> loadHTML($content);
$xpath = new DOMXPath($dom);
$classname = "/html/body/table[1]/tbody/tr/td[2]/span[1]/a";
foreach ($dom->getElementsByTagName('table') as $node) {
echo $dom->saveHtml($node), PHP_EOL;
//$originalURL = $node->getAttribute('href');
}
//$html = $dom->saveHTML();
}
我可以很好地解析表,但是当获取某些元素的值(没有任何ID或类)时,我似乎只能获得所有锚标记或所有表行等 .
谁能指出我正确的方向?如果还有什么我可以在这里添加,请告诉我 . 谢谢!
添加HTML:我特意尝试从每个表/项中提取 <span><a href="https://www.youtube.com/watch?v=nZC4mXaosxM">[link]</a></span>
. http://pastebin.com/QXa2i6qz
2 回答
以下代码可以从每个内容中提取所有youtube链接 .
具有内部元素的数组的多维格式的代码输出是
entry_title
,author
,author_reddit_url
和video_url
. 希望它能帮到你!如果你需要解析整个事情 . 一种方法是使用DOMXPath类并直接查询xml . 文档应该指导您完成 .
http://php.net/manual/es/class.domxpath.php .