Heim > Backend-Entwicklung > PHP-Tutorial > So verwenden Sie DOMDocument in PHP zur Verarbeitung von HTML- und XML-Dokumenten

So verwenden Sie DOMDocument in PHP zur Verarbeitung von HTML- und XML-Dokumenten

藏色散人
Freigeben: 2023-04-09 20:10:02
nach vorne
4783 Leute haben es durchsucht

DOMDocument wird in PHP zum Verarbeiten von HTML- und XML-Dokumenten verwendet

Tatsächlich hat uns PHP ab PHP5 eine leistungsstarke Klasse zum Parsen und Generieren von XML-bezogenen Vorgängen zur Verfügung gestellt, nämlich die DOMDocument-Klasse, die wir verwenden werden über heute reden. Ich schätze jedoch, dass die meisten Leute beim Crawlen von Webseiten immer noch gerne reguläre Ausdrücke zum Parsen von Webinhalten verwenden werden. Nachdem Sie diesen Kurs heute gelernt haben, können Sie beim nächsten Mal versuchen, die PHP-eigene Methode zum Parsen und Analysieren zu verwenden.

HTML parsen

// 解析 HTML
$baidu = file_get_contents('https://www.baidu.com');

$doc = new DOMDocument();
@$doc->loadHTML($baidu);

// 百度输出框
$inputSearch = $doc->getElementById('kw');
var_dump($inputSearch);

// object(DOMElement)#2 
//     ....

echo $inputSearch->getAttribute('name'), PHP_EOL; // wd

// 获取所有图片的链接
$allImageLinks = [];
$imgs = $doc->getElementsByTagName('img');
foreach($imgs as $img){
    $allImageLinks[] = $img->getAttribute('src');
}

print_r($allImageLinks);

// Array
// (
//     [0] => //www.baidu.com/img/baidu_jgylogo3.gif
//     [1] => //www.baidu.com/img/bd_logo.png
//     [2] => http://s1.bdstatic.com/r/www/cache/static/global/img/gs_237f015b.gif
// )

// 利用 parse_url 分析链接
foreach($allImageLinks as $link){
    print_r(parse_url($link));
}

// Array
// (
//     [host] => www.baidu.com
//     [path] => /img/baidu_jgylogo3.gif
// )
// Array
// (
//     [host] => www.baidu.com
//     [path] => /img/bd_logo.png
// )
// Array
// (
//     [scheme] => http
//     [host] => s1.bdstatic.com
//     [path] => /r/www/cache/static/global/img/gs_237f015b.gif
// )
Nach dem Login kopieren

Fühlt es sich nicht so klar und objektorientiert an? Es fühlt sich an, als würde man die ORM-Bibliothek zum ersten Mal für Datenbankoperationen verwenden. Schauen wir es uns Stück für Stück an.

$baidu = file_get_contents('https://www.baidu.com');

$doc = new DOMDocument();
@$doc->loadHTML($baidu);
Nach dem Login kopieren

Der erste Schritt besteht darin, den Dokumentinhalt zu laden. Dies ist einfacher zu verstehen. Verwenden Sie die Methode „loadHTML()“, um den HTML-Inhalt direkt zu laden. Es bietet auch mehrere andere Methoden, nämlich: Load() lädt XML aus einer Datei; LoadXML() lädt XML aus einer Zeichenfolge; LoadHTMLFile() lädt HTML aus einer Datei.

// 百度输出框
$inputSearch = $doc->getElementById('kw');
var_dump($inputSearch);

// object(DOMElement)#2 
//     ....

echo $inputSearch->getAttribute('name'), PHP_EOL; // wd
Nach dem Login kopieren

Als nächstes verwenden wir dieselbe DOM-Manipulations-API wie Front-End-JS, um Elemente in HTML zu manipulieren. In diesem Beispiel erhalten Sie das Textfeld von Baidu und verwenden direkt die Methode getElementById(), um das DOMElement-Objekt mit der ID als angegebenen Inhalt abzurufen. Dann können Sie seine Werte, Attribute usw. abrufen.

【Verwandte Empfehlung: PHP-Video-Tutorial

// 获取所有图片的链接
$allImageLinks = [];
$imgs = $doc->getElementsByTagName('img');
foreach($imgs as $img){
    $allImageLinks[] = $img->getAttribute('src');
}

print_r($allImageLinks);

// Array
// (
//     [0] => //www.baidu.com/img/baidu_jgylogo3.gif
//     [1] => //www.baidu.com/img/bd_logo.png
//     [2] => http://s1.bdstatic.com/r/www/cache/static/global/img/gs_237f015b.gif
// )

// 利用 parse_url 分析链接
foreach($allImageLinks as $link){
    print_r(parse_url($link));
}

// Array
// (
//     [host] => www.baidu.com
//     [path] => /img/baidu_jgylogo3.gif
// )
// Array
// (
//     [host] => www.baidu.com
//     [path] => /img/bd_logo.png
// )
// Array
// (
//     [scheme] => http
//     [host] => s1.bdstatic.com
//     [path] => /r/www/cache/static/global/img/gs_237f015b.gif
// )
Nach dem Login kopieren

Dieses Beispiel dient dazu, alle Bildlinks im HTML-Dokument abzurufen. Im Vergleich zu regulären Ausdrücken ist es viel praktischer und der Code selbst ist selbsterklärend, sodass das Problem des regulären Matching-Fehlers nicht berücksichtigt werden muss. Durch die Zusammenarbeit mit einer anderen parse_url()-Methode, die mit PHP geliefert wird, können Sie den Link auch sehr bequem analysieren und den gewünschten Inhalt extrahieren.

Das Parsen von XML ähnelt dem Parsen von HTML. Beide können mithilfe der von DOMDocument und DOMElement bereitgestellten Methodenschnittstelle problemlos analysiert werden. Was wollen wir also als XML-Standardformat generieren? Natürlich ist es auch sehr einfach, Zeichenfolgen zu verbinden. Sie können diese Klasse verwenden, um objektbasierte Operationen auszuführen.

Generieren Sie ein XML

// 生成一个XML文档
$xml = new DOMDocument('1.0', 'UTF-8');

$node1 = $xml->createElement('First', 'This is First Node.');
$node1->setAttribute('type', '1');

$node2 = $xml->createElement('Second');
$node2->setAttribute('type', '2');
$node2_child = $xml->createElement('Second-Child', 'This is Second Node Child.');
$node2->appendChild($node2_child);

$xml->appendChild($node1);
$xml->appendChild($node2);
print $xml->saveXML();

/*
<?xml version="1.0" encoding="UTF-8"?>
<First type="1">This is First Node.</First>
<Second type="2"><Second-Child>This is Second Node Child.</Second-Child></Second>
*/
Nach dem Login kopieren

Solange Sie über ein wenig Front-End-JS-Grundlagen verfügen, ist es tatsächlich nicht schwer, die Bedeutung dieses Codes zu erkennen. Verwenden Sie die Methode createElement(), um ein DOMElement-Objekt zu erstellen und ihm dann Eigenschaften und Inhalte hinzuzufügen. Verwenden Sie die Methode appendChild(), um untergeordnete Knoten zum aktuellen DOMElement oder DOMDocument hinzuzufügen. Verwenden Sie schließlich saveXML(), um Inhalte im Standard-XML-Format zu generieren.

Zusammenfassung

Anhand der beiden oben genannten einfachen Beispiele glaube ich, dass jeder sehr daran interessiert ist, wie dieses DOMDocument das Parsen von XML-Klassendateien durchführt. Es gibt jedoch keinen relevanten Test, wie unterschiedlich ihre Leistung im Vergleich zur regulären Parsing-Methode ist. Unter normalen Umständen wird das HTML-Dokument der Website jedoch nicht zu groß sein. Schließlich berücksichtigt jede Website auch ihre eigene Ladegeschwindigkeit Wenn das Dokument sehr groß ist, ist die Benutzererfahrung schlecht, sodass die Verwendung dieser Schnittstellen für die tägliche Crawler-Analyse und -Verarbeitung grundsätzlich kein Problem darstellt.

Testcode:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202002/source/PHP%E4%B8%AD%E4%BD%BF%E7%94%A8DOMDocument%E6%9D%A5%E5%A4%84%E7%90%86HTML%E3%80%81XML%E6%96%87%E6%A1%A3.php
Nach dem Login kopieren

Referenzdokument:
https://www.php.net/manual/zh/class.domdocument.php

Das obige ist der detaillierte Inhalt vonSo verwenden Sie DOMDocument in PHP zur Verarbeitung von HTML- und XML-Dokumenten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage