【问题标题】:Getting paragraph in XML DOM (PHP)在 XML DOM (PHP) 中获取段落
【发布时间】:2012-11-08 14:45:19
【问题描述】:

我正在尝试从 boomkat.com RSS 提要创建新版本的数据库。饲料位于此处: link

现在,我在选择段落标签内的内容时遇到了问题。

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>

到目前为止我所做的是:

<?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' 不起作用。

【问题讨论】:

    标签: php xml dom rss


    【解决方案1】:

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

    之所以要获取整个文档,是因为您要在整个文档中查询一个名为“内容”的元素。没有这样的 HTML 元素。相反,您应该使用

    $dom->getElementsByTagName('p');
    

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

    【讨论】:

    • 感谢您的帮助。我已将 TagName 更改为 'p' 并加载到 loadHTML 中,但我现在得到的只是:codefeeds.boomkat.com/boomkat_downloads_just_arrivedcode
    • DOMDocument::loadHTML() 仅字符串除外。您正在加载一个远程文件,因此您需要使用 DOMDocument::loadHTMLFile(),而不是 loadHTML()。
    • 如果您提供正确的错误,我可以提供更多帮助。您是否打开了错误报告?你如何调试你的代码?
    • 老实说,我几天前才开始学习 PHP/XML,对这一切还很陌生。我正在用 Notepad++ 编写代码并在 Google Chrome 中加载脚本。当我执行脚本时,我如何才能真正看到发生了什么?
    • 没关系,我已经打开了所有错误,但它没有显示任何内容。当我写诸如“ech”之类的东西而不是 echo 时,它会显示错误,但是 $content = $dom->getElementsByTagName('p');不显示任何错误,我在页面上看不到任何内容。
    【解决方案2】:

    好的,我不明白您为什么会遇到问题,但我只是尝试了您提供的 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"
    

    这是您在代码中所做的吗?

    【讨论】:

    • 这似乎适用于该特定链接,但我需要此链接:feeds.boomkat.com/boomkat_downloads_just_arrived
    • 对不起,我的朋友,如果你不能让它像我演示的那样工作,那么,它超出了你的问题范围。尝试在另一个问题中寻找答案。
    猜你喜欢
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 2022-12-18
    相关资源
    最近更新 更多