Hallo,
ich stehe vor einem Berg von HTML-Dokumenten (ca. 7.000). Bei diesen HTML-Dokumenten handelt es sich um Reports von Messgeräten. Meine Aufgabe ist es jetzt ein Skript zu schreiben, welches diese Dokumente auswertet.
Bislang habe ich nur sehr wenig DOM-Erfahrung, denke aber das ich mit xpath eher ans Ziel komme als mit Regex oder sonst etwas.
Im ersten Schritt habe ich mir alle Testbeschreibungen anzeigen lassen die ich mittels xpath ueber /tr/td/b ansprechen kann, in einem HTML-Dokument koennen mehrere 100 Testbeschreibungen auftauchen.
Fuer die Auswertung benoetigte ich aber nur die Testbeschreibungen deren Testergebnis negativ waren. Diese sind im HTML-Dokument mittels <span class="wrong">wrong</span> gekennzeichnet.
Diese bekomme ich mittels //span[@class=\'wrong\']
Das Beispieldokument enthaelt 121 Testbeschreibungen davon waren 23 negativ.
Als Ergebnis erhalte ich mit meinem nachfolgenden Skript statt der 23 Testbeschreibungen
2783 Eintraege -> 23 * 121.
Die beiden xpath-Bedinungen fuer sich betrachtet funktionieren, allerdings scheitere ich bei der Kombination der beiden.
Irgendwie habe ich mich festgebissen und finde die Loesung nicht...
ich stehe vor einem Berg von HTML-Dokumenten (ca. 7.000). Bei diesen HTML-Dokumenten handelt es sich um Reports von Messgeräten. Meine Aufgabe ist es jetzt ein Skript zu schreiben, welches diese Dokumente auswertet.
Bislang habe ich nur sehr wenig DOM-Erfahrung, denke aber das ich mit xpath eher ans Ziel komme als mit Regex oder sonst etwas.
Im ersten Schritt habe ich mir alle Testbeschreibungen anzeigen lassen die ich mittels xpath ueber /tr/td/b ansprechen kann, in einem HTML-Dokument koennen mehrere 100 Testbeschreibungen auftauchen.
Fuer die Auswertung benoetigte ich aber nur die Testbeschreibungen deren Testergebnis negativ waren. Diese sind im HTML-Dokument mittels <span class="wrong">wrong</span> gekennzeichnet.
Diese bekomme ich mittels //span[@class=\'wrong\']
Das Beispieldokument enthaelt 121 Testbeschreibungen davon waren 23 negativ.
Als Ergebnis erhalte ich mit meinem nachfolgenden Skript statt der 23 Testbeschreibungen
2783 Eintraege -> 23 * 121.
Die beiden xpath-Bedinungen fuer sich betrachtet funktionieren, allerdings scheitere ich bei der Kombination der beiden.
Irgendwie habe ich mich festgebissen und finde die Loesung nicht...
PHP-Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<?php
$html = new DOMDocument();
$html->loadHtmlFile( 'report.html' );
$xpath = new DOMXPath( $html );
/* alle Testbeschreibungen selektieren */
$testdescs = $xpath->query( '//tr/td/b' );
echo "<ol>";
foreach ($testdescs as $testdesc)
{
/* Testbeschreibungen selektieren deren Ergebnis negativ */
$results = $xpath->query( '//span[@class=\'wrong\']', $testdesc );
foreach ($results as $result)
{
echo "<li>".$testdesc->nodeValue."</li>";
}
}
echo "</ol>";
?>
</html>

Kommentar