【问题标题】:SAX Parser Script for DOM Parser in PHPPHP 中用于 DOM 解析器的 SAX 解析器脚本
【发布时间】:2014-06-11 06:18:24
【问题描述】:

我的 DOM 文档代码需要 SAX 解析器代码。

如果有人愿意为我提供相同的代码。

 function flipkart_price_fetch($sel_image){  
    global $sel_image;  
    $price = file_get_contents("{$sel_image['flipkart_content']}");  
    $dom = new DOMDocument();  
    @$dom->loadHTML($price);  
    $divs = $dom->getElementsByTagName('span');  
    foreach($divs as $div){  
        if($div->getAttribute('class') == 'fk-font-verybig pprice fk-bold'){  
            echo $div->nodeValue;  
            }  
        }  
    } 

【问题讨论】:

  • 您认为为什么需要使用 SAX?
  • 我在这里使用过 DOM,它需要花费大量时间来解析.. 所以我搜索了一下,发现 SAX 解析器比 DOM 更快。我需要在我的网页上更快地获得结果。你有什么建议呢?
  • 我主要使用 DOM+Xpath。 XMLReader 用于非常大的 XML 文件,但 DOM+Xpath 再次用于部分。我不确定 SAX 或 XMLReader 是否可以处理 HTML。
  • 先生,能否请您提供此代码的解决方案以更快地解析它。我急需实现它。

标签: php dom sax


【解决方案1】:

我不认为 DOM 是这里的性能猪,而是所有 span 元素节点的迭代。 DOMXpath 允许使用 Xpath 表达式直接获取节点:

$dom = new DOMDocument();  
@$dom->loadHTMLFile($sel_image['flipkart_content']);  
$xpath = new DOMXpath($dom);

// this matches the node by the class name "pprice"
$price = $xpath->evaluate(
  'string(.//span[contains(concat(" ", normalize-space(@class), " "), " pprice ")])'
);

echo $price;

在 SO 和/或 Web 上搜索 Xpath。

您的来源中还有一些其他错误:

  1. global $sel_image;

    $sel_image 是函数参数,这里没有理由将其设为全局状态。

  2. "{$sel_image['flipkart_content']}"

    这个字符串只包含变量,直接使用变量$sel_image['flipkart_content']或者强制转换成字符串(string)$sel_image['flipkart_content']

  3. $price = file_get_contents("{$sel_image['flipkart_content']}");

    这里不需要单独加载文件/url - 使用DOMDocument::loadHTMLFile()

【讨论】:

  • 感谢您的反馈.. 我已将 $sel_image 设为全局,因为我还在其他代码中的其他地方使用过它。关于错误 2 和 3,我会确保这一点.. : )
猜你喜欢
  • 2012-07-03
  • 2011-02-25
  • 2020-01-17
  • 1970-01-01
  • 2011-08-14
  • 2012-08-27
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
相关资源
最近更新 更多