PHP
Análisis de HTML
Buscar..
Analizar HTML desde una cadena
PHP implementa un analizador compatible con DOM Nivel 2 , lo que le permite trabajar con HTML utilizando métodos conocidos como getElementById()
o 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;
Salidas:
Hello, World!
Tenga en cuenta que PHP emitirá advertencias sobre cualquier problema con el HTML, especialmente si está importando un fragmento de documento. Para evitar estas advertencias, indique a la biblioteca DOM (libxml) que maneje sus propios errores llamando a libxml_use_internal_errors()
antes de importar su HTML. Luego puede usar libxml_get_errors()
para manejar los errores si es necesario.
Utilizando 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;
Salidas:
Hello, World!
SimpleXML
Presentación
SimpleXML es una biblioteca de PHP que proporciona una manera fácil de trabajar con documentos XML (especialmente leer e iterar a través de datos XML).
La única restricción es que el documento XML debe estar bien formado.
Análisis de XML utilizando un enfoque de procedimiento
// 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
Analizar XML utilizando el enfoque OOP
// $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.
Accediendo a los niños y atributos
- Cuando SimpleXML analiza un documento XML, convierte todos sus elementos XML o nodos en propiedades del objeto SimpleXMLElement resultante.
- Además, convierte los atributos XML en una matriz asociativa a la que se puede acceder desde la propiedad a la que pertenecen.
Cuando conoces sus nombres:
$library = new SimpleXMLElement('library.xml', NULL, true);
foreach ($library->book as $book){
echo $book['isbn'];
echo $book->title;
echo $book->author;
echo $book->publisher;
}
- El principal inconveniente de este enfoque es que es necesario conocer los nombres de cada elemento y atributo en el documento XML.
Cuando no sabes sus nombres (o no quieres saberlos):
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;
}
}