PHP
Анализ HTML
Поиск…
Анализ HTML из строки
PHP реализует совместимый с DOM уровень 2 синтаксический анализатор, позволяющий работать с HTML, используя знакомые методы, такие как getElementById()
или appendChild()
.
$html = '<html><body><span id="text">Hello, World!</span></body></html>';
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html);
echo $doc->getElementById("text")->textContent;
Выходы:
Hello, World!
Обратите внимание: PHP будет генерировать предупреждения о любых проблемах с HTML, особенно если вы импортируете фрагмент документа. Чтобы избежать этих предупреждений, скажите библиотеке DOM (libxml) обработать свои собственные ошибки, вызвав libxml_use_internal_errors()
перед импортом вашего HTML. Затем вы можете использовать libxml_get_errors()
для обработки ошибок, если это необходимо.
Использование XPath
$html = '<html><body><span class="text">Hello, World!</span></body></html>';
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$span = $xpath->query("//span[@class='text']")->item(0);
echo $span->textContent;
Выходы:
Hello, World!
SimpleXML
презентация
SimpleXML - это библиотека PHP, которая обеспечивает простой способ работы с XML-документами (особенно чтение и итерация через XML-данные).
Единственное ограничение состоит в том, что XML-документ должен быть хорошо сформирован.
Анализ XML с использованием процедурного подхода
// Load an XML string
$xmlstr = file_get_contents('library.xml');
$library = simplexml_load_string($xmlstr);
// Load an XML file
$library = simplexml_load_file('library.xml');
// You can load a local file path or a valid URL (if allow_url_fopen is set to "On" in php.ini
Анализ XML с использованием подхода ООП
// $isPathToFile: it informs the constructor that the 1st argument represents the path to a file,
// rather than a string that contains 1the XML data itself.
// Load an XML string
$xmlstr = file_get_contents('library.xml');
$library = new SimpleXMLElement($xmlstr);
// Load an XML file
$library = new SimpleXMLElement('library.xml', NULL, true);
// $isPathToFile: it informs the constructor that the first argument represents the path to a file, rather than a string that contains 1the XML data itself.
Доступ к детям и атрибуты
- Когда SimpleXML анализирует XML-документ, он преобразует все свои XML-элементы или узлы в свойства получаемого объекта SimpleXMLElement
- Кроме того, он преобразует атрибуты XML в ассоциативный массив, к которому можно получить доступ из свойства, к которому они принадлежат.
Когда вы знаете их имена:
$library = new SimpleXMLElement('library.xml', NULL, true);
foreach ($library->book as $book){
echo $book['isbn'];
echo $book->title;
echo $book->author;
echo $book->publisher;
}
- Основным недостатком этого подхода является то, что необходимо знать имена каждого элемента и атрибута в документе XML.
Когда вы не знаете их имена (или вы не хотите их знать):
foreach ($library->children() as $child){
echo $child->getName();
// Get attributes of this element
foreach ($child->attributes() as $attr){
echo ' ' . $attr->getName() . ': ' . $attr;
}
// Get children
foreach ($child->children() as $subchild){
echo ' ' . $subchild->getName() . ': ' . $subchild;
}
}