【问题标题】:Php - retrieve informations from an xml filePhp - 从 xml 文件中检索信息
【发布时间】:2012-10-31 06:48:21
【问题描述】:

我正在学习网络编程。我需要从网页中检索一些信息。我有页面的url,所以我想要html源代码,把它翻译成xml,然后使用php的dom函数来获取我需要的信息。

我的php代码是这样的:

$url=$_POST['url']; //url

$doc_html=new DOMDocument();
$doc_html->loadHTML($url); //html page
$doc_xml=new DOMDocument();
$doc_xml->loadXML($doc_html->saveXML()); //xml converted page

$nome_app=new DOMElement($doc_xml->getElementById('title'));

echo $nome_app->nodeValue;

我收到这个致命错误:

未捕获的异常 'DOMException' 与此行上的消息“无效字符错误”:

$nome_app=new DOMElement($doc_xml->getElementById('title'));

怎么了?是html-to-xml的整个过程吗?我在网上找到了一些例子,应该可以工作...... 谢谢!

【问题讨论】:

    标签: php html xml dom


    【解决方案1】:

    解决了!简单地说:

    $doc_html=new DOMDocument();
    $doc_html->loadHTML(file_get_contents($url));
    $doc_html->saveXML();
    $nome = $doc_html->getElementsByTagName('h1');
    foreach ($nome as $n) { 
       echo $n->nodeValue, PHP_EOL;
    }
    

    可能之前的代码太乱了。 谢谢大家的回答!

    【讨论】:

      【解决方案2】:

      您需要为您在 HTML 中使用的特殊字符定义 XML 实体。 肯定是和这里一样的问题:DOMDocument::loadXML vs. HTML Entities

      【讨论】:

        【解决方案3】:

        我会使用 preg_match() 解决方案来获取您需要的内容,而不是将整个文档解析为 XML。特别是如果文档由于某种原因变得无效,您将无法再获得您的信息。

        【讨论】:

        • 您和@Bgi 是对的,但这是我的情况:我有大量源代码,但我不知道 XML 文件需要的 DTD。解析和更正整个文档将毫无用处,因为我只需要一些 html 内容,以及一种无需解析很长的字符串即可检索这些内容的方法,因此使用 DOM。
        【解决方案4】:

        最好的方法是使用 xpath 查询,

        http://php.net/manual/en/simplexmlelement.xpath.php

        速度很快

        【讨论】:

        • 是我的第二个想法,但我更喜欢使用 DOM,因为源代码很长而且很混乱,所以我最好使用标签名称:)
        猜你喜欢
        • 2017-02-21
        • 2012-02-22
        • 1970-01-01
        • 1970-01-01
        • 2021-02-09
        • 2011-12-02
        • 2022-01-08
        • 2014-07-02
        • 1970-01-01
        相关资源
        最近更新 更多