国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

如何在 PHP 中解析和處理 HTML/XML?
P粉838563523
P粉838563523 2023-08-23 20:18:41
0
2
681
<p>如何解析 HTML/XML 並從中擷取資訊? </p>
P粉838563523
P粉838563523

全部回覆(2)
P粉402806175

嘗試簡單 HTML DOM 解析器。

  • 用 PHP 5 編寫的 HTML DOM 解析器,可讓您以非常簡單的方式操作 HTML!
  • 需要 PHP 5 。
  • 支援無效 HTML。
  • 使用選擇器在 HTML 頁面上尋找標(biāo)籤,就像 jQuery 一樣。
  • 在一行中從 HTML 中提取內(nèi)容。
  • 下載

注意:顧名思義,它對於簡單的任務(wù)很有用。它使用正規(guī)表示式而不是 HTML 解析器,因此對於更複雜的任務(wù)來說速度會慢得多。其大部分程式碼庫是在 2008 年編寫的,此後僅進(jìn)行了少量改進(jìn)。它不遵循現(xiàn)代 PHP 編碼標(biāo)準(zhǔn),而且很難合併到現(xiàn)代 PSR 相容專案中。

範(fàn)例:

如何取得HTML元素:

// Create DOM from URL or file
$html = file_get_html('http://www.example.com/');

// Find all images
foreach($html->find('img') as $element)
       echo $element->src . '<br>';

// Find all links
foreach($html->find('a') as $element)
       echo $element->href . '<br>';

如何修改 HTML 元素:

// Create DOM from string
$html = str_get_html('<div id="hello">Hello</div><div id="world">World</div>');

$html->find('div', 1)->class = 'bar';

$html->find('div[id=hello]', 0)->innertext = 'foo';

echo $html;

從 HTML 擷取內(nèi)容:

// Dump contents (without tags) from HTML
echo file_get_html('http://www.google.com/')->plaintext;

抓取 Slashdot:

// Create DOM from URL
$html = file_get_html('http://slashdot.org/');

// Find all article blocks
foreach($html->find('div.article') as $article) {
    $item['title']     = $article->find('div.title', 0)->plaintext;
    $item['intro']    = $article->find('div.intro', 0)->plaintext;
    $item['details'] = $article->find('div.details', 0)->plaintext;
    $articles[] = $item;
}

print_r($articles);
P粉436410586

原生 XML 擴(kuò)充

我更喜歡使用原生 XML 擴(kuò)充之一,因?yàn)樗鼈兣cPHP 通常比所有第 3 方庫更快,並為我提供了對標(biāo)記所需的所有控制。

DOM

#

DOM 能夠解析和修改現(xiàn)實(shí)世界(損壞的)HTML,它可以執(zhí)行 XPath 查詢.它是基於 libxml

使用 DOM 需要一些時(shí)間才能提高工作效率,但在我看來,這段時(shí)間是值得的。由於 DOM 是一個(gè)與語言無關(guān)的接口,您會發(fā)現(xiàn)多種語言的實(shí)現(xiàn),因此如果您需要更改程式語言,那麼您很可能已經(jīng)知道如何使用該語言的 DOM API。

如何使用 DOM 擴(kuò)充功能已在 StackOverflow 上廣泛介紹,所以如果當(dāng)您選擇使用它時(shí),您可以確定您遇到的大多數(shù)問題都可以透過搜尋/瀏覽 Stack Overflow 來解決。

基本用法範(fàn)例一般概念概述可在其他答案中找到。

XMLReader

##

XMLReader 與 DOM 一樣,是基於 libxml。我不知道如何觸發(fā) HTML 解析器模組,因此使用 XMLReader 解析損壞的 HTML 可能不如使用 DOM 強(qiáng)大,在 DOM 中您可以明確地告訴它使用 libxml 的 HTML 解析器模組。

在另一個(gè)答案中提供了基本用法範(fàn)例。

XML 解析器

#

XML 解析器函式庫也基於 libxml,並實(shí)作了 SAX 風(fēng)格的 XML 推送解析器。對於記憶體管理來說,它可能是比 DOM 或 SimpleXML 更好的選擇,但比 XMLReader 實(shí)現(xiàn)的拉解析器更難使用。

SimpleXml

#

當(dāng)您知道 HTML 是有效的 XHTML 時(shí),SimpleXML 是一個(gè)選項(xiàng)。如果您需要解析損壞的 HTML,甚至不要考慮 SimpleXml,因?yàn)樗鼤枞?

提供了基本上使用範(fàn)例,並且有PHP 手冊中有很多其他範(fàn)例。


第 3 方庫(基於 libxml)

如果您喜歡使用第 3 方庫,我建議使用實(shí)際使用 DOM/libxml 下面而不是字串解析。

FluentDom

#

HtmlPageDom

phpQuery

#

這被描述為“廢棄軟體和錯(cuò)誤:使用時(shí)需要您自擔(dān)風(fēng)險(xiǎn)”,但似乎維護(hù)程度最低。

laminas-dom

#

fDOMDocument

sabre/xml

#

FluidXML

#

第 3 方(非基於 libxml)

基於 DOM/libxml 建置的好處是,您可以立即獲得良好的效能,因?yàn)槟侗緳C(jī)擴(kuò)充。然而,並非所有第三方函式庫都走這條路。下面列出了其中一些

PHP 簡單 HTML DOM 解析器

我通常不推薦這個(gè)解析器。程式碼庫很糟糕,解析器本身相當(dāng)慢並且佔(zhàn)用記憶體。並非所有 jQuery 選擇器(例如 子選擇器)都是可行的。任何基於 libxml 的函式庫都應(yīng)該輕鬆超越這一點(diǎn)。

PHP Html 解析器

再說一遍,我不會推薦這個(gè)解析器。 CPU 使用率高時(shí)速度相當(dāng)慢。也沒有清除已建立的 DOM 物件記憶體的功能。這些問題在嵌套循環(huán)中尤其嚴(yán)重。該文件本身不準(zhǔn)確且拼寫錯(cuò)誤,自 2016 年 4 月 14 日以來沒有任何修復(fù)回應(yīng)。


HTML 5

您可以使用上述內(nèi)容來解析 HTML5,但由於 HTML5 允許的標(biāo)記,可能會出現(xiàn)一些奇怪的情況。因此,對於 HTML5,您可能需要考慮使用專用解析器。請注意,這些是用 PHP 編寫的,因此與使用較低等級語言編譯的擴(kuò)充相比,效能較慢且記憶體使用量增加。

HTML5DomDocument

HTML5

#

正規(guī)表示式

最後也是最不推薦,您可以使用正規(guī)表示式從 HTML 擷取資料一個(gè)>。一般來說,不鼓勵在 HTML 上使用正規(guī)表示式。

您在網(wǎng)路上找到的大多數(shù)用於匹配標(biāo)記的程式碼片段都很脆弱。在大多數(shù)情況下,它們僅適用於非常特定的 HTML 片段。微小的標(biāo)記變更(例如在某處添加空格,或在標(biāo)記中新增或變更屬性)可能會導(dǎo)致正規(guī)表示式在編寫不正確時(shí)失敗。在 HTML 上使用 RegEx 之前,您應(yīng)該知道自己在做什麼。

HTML 解析器已經(jīng)知道 HTML 的語法規(guī)則。必須為您編寫的每個(gè)新正規(guī)表示式教授正規(guī)表示式。正規(guī)表示式在某些情況下很好,但這實(shí)際上取決於您的用例。

可以編寫更可靠的解析器,但是使用正則表達(dá)式編寫完整且可靠的自訂解析器當(dāng)上述庫已經(jīng)存在並且在這方面做得更好時(shí),這是浪費(fèi)時(shí)間。

另請參閱克蘇魯方式解析 Html


#書籍

如果你想花點(diǎn)錢,可以看看

#我不隸屬於 PHP 架構(gòu)師或作者。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板