Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在XML DOM(PHP)中获取段落_Php_Xml_Dom_Rss - Fatal编程技术网

在XML DOM(PHP)中获取段落

在XML DOM(PHP)中获取段落,php,xml,dom,rss,Php,Xml,Dom,Rss,我正在尝试从boomkat.com RSS源创建新版本的数据库。Feed位于以下位置: 现在,我对段落标记中的内容选择有问题 RSS提要中的一段如下所示: <p>GOAT<br/><a href="http://boomkat.com/downloads/601228-goat-world-music">World Music</a><br/>ROCKET RECORDINGS<br/>INDIE / ROCK / ALT

我正在尝试从boomkat.com RSS源创建新版本的数据库。Feed位于以下位置:

现在,我对段落标记中的内容选择有问题

RSS提要中的一段如下所示:

<p>GOAT<br/><a href="http://boomkat.com/downloads/601228-goat-world-music">World Music</a><br/>ROCKET RECORDINGS<br/>INDIE / ROCK / ALTERNATIVE<br/>MP3 Release</p>
山羊

火箭唱片
独立/摇滚/另类
MP3发行版

到目前为止,我所做的是:

<?php

$dom = new DOMDocument;
$dom->validateOnParse = true;
$dom->load("http://feeds.boomkat.com/boomkat_downloads_just_arrived");
$content = $dom->getElementsByTagName('content');
foreach ($content as $result) {
    echo $result->nodeValue, PHP_EOL;
}
?>


但这给了我全部的信息。在getElementsByTagName中写入“p”不起作用。

我建议使用DOMDocument::loadHTMLFile()方法,而不是DOMDocument::load()(因为load()严格用于读取XML,而不是HTML)

获取整个文档的原因是,您正在查询整个文档中名为“content”的元素。没有这样的HTML元素。相反,你应该使用

$dom->getElementsByTagName('p');

这将获取HTML文档中的所有标记,然后您可以循环该标记。查询带有“p”的标记不起作用的主要原因是,您需要将文档作为严格的HTML加载,而不是使用默认的XML。

好的,我不明白您为什么会遇到问题,但我只是尝试了您提供的URL的建议,并正确打印了每个标记的所有文本

代码如下:

$doc = new DOMDocument();
$doc->loadHTMLFile("http://boomkat.com/downloads/601228-goat-world-music");
$content = $doc->getElementsByTagName("p");

foreach($content as $element) {
    Util::debug($element->textContent); // helper method similar to PHP's var_dump()
}
以下是我能够打印到屏幕上的结果:

string(91) "Residual Echoes have come up with a really rather lovely disc of psychedelic folk goodness."

string(8) "MAMMATUS"

string(8) "Mammatus"

string(17) "ROCKET RECORDINGS"

string(45) "MP3 Download // £2.95FLAC Download // £3.95"

string(0) ""

string(19) "SERPENTINA SATELITE"

string(16) "Mecanica Celeste"

string(17) "ROCKET RECORDINGS"

string(45) "MP3 Download // £3.95FLAC Download // £4.95"

string(0) ""

string(12) "SUNCOIL SECT"

string(25) "One Note Obscures Another"

string(17) "ROCKET RECORDINGS"

string(45) "MP3 Download // £6.99FLAC Download // £7.99"

string(0) ""

string(16) "TEETH OF THE SEA"

string(10) "Hypnoticon"

string(17) "ROCKET RECORDINGS"

string(45) "MP3 Download // £2.50FLAC Download // £3.50"

string(52) "Proggy kosmiche rock from London's Teeth Of The Sea."

string(16) "TEETH OF THE SEA"

string(21) "Orphaned By the Ocean"

string(17) "ROCKET RECORDINGS"

string(45) "MP3 Download // £5.99FLAC Download // £6.99"

这是您在代码中执行的操作吗?

谢谢您的帮助。我已将标记名更改为“p”并加载到loadHTML中,但我现在得到的唯一结果是:
code
code
DOMDocument::loadHTML()只包含字符串。您正在加载一个远程文件,因此需要使用DOMDocument::loadHTMLFile(),而不是loadHTML()。如果您提供正确的错误,我可以提供更多帮助。是否已打开错误报告?如何调试代码?老实说,我几天前才开始学习PHP/XML,对这一切我都是新手。我正在用记事本++编写代码,用谷歌浏览器加载脚本。当我执行脚本时,我如何才能真正看到发生了什么?尽管如此,我已经打开了所有错误,但它没有显示任何内容。当我编写诸如“ech”之类的东西而不是echo时,它会显示error fine,但$content=$dom->getElementsByTagName('p');没有显示任何错误,我在页面上也看不到任何内容。这似乎适用于该特定链接,但我需要此链接:对不起,我的朋友,如果您不能像我演示的那样使其工作,那么,这超出了您的问题范围。试着在另一个问题中寻找答案。