PHP
HTML parseren
Zoeken…
HTML parseren uit een string
PHP implementeert een DOM Level 2- compatibele parser, waarmee u met HTML kunt werken met bekende methoden zoals getElementById()
of 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;
uitgangen:
Hello, World!
Merk op dat PHP waarschuwt voor eventuele problemen met de HTML, vooral als u een documentfragment importeert. Om deze waarschuwingen te voorkomen, laat u de DOM-bibliotheek (libxml) weten dat deze zijn eigen fouten moet verwerken door libxml_use_internal_errors()
aan te roepen voordat u uw HTML importeert. U kunt vervolgens libxml_get_errors()
gebruiken om indien nodig fouten af te handelen.
XPath gebruiken
$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;
uitgangen:
Hello, World!
SimpleXML
Presentatie
SimpleXML is een PHP-bibliotheek die een eenvoudige manier biedt om met XML-documenten te werken (vooral lezen en itereren via XML-gegevens).
De enige beperking is dat het XML-document goed gevormd moet zijn.
XML parseren met procedurele benadering
// 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
Parsing XML met behulp van OOP-benadering
// $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.
Toegang tot kinderen en kenmerken
- Wanneer SimpleXML een XML-document parseert, converteert het alle XML-elementen of knooppunten naar eigenschappen van het resulterende SimpleXMLElement-object
- Bovendien converteert het XML-kenmerken naar een associatieve array waartoe toegang kan worden verkregen vanuit de eigenschap waartoe ze behoren.
Als je hun namen kent:
$library = new SimpleXMLElement('library.xml', NULL, true);
foreach ($library->book as $book){
echo $book['isbn'];
echo $book->title;
echo $book->author;
echo $book->publisher;
}
- Het grote nadeel van deze benadering is dat het noodzakelijk is om de namen van elk element en kenmerk in het XML-document te kennen.
Als je hun namen niet kent (of als je ze niet wilt weten):
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;
}
}