Bei der Verarbeitung von XML -Daten begegnen wir häufig auf einige "Rauschinformationen" - dies können illegale Zeichen, nutzlose Tags, Kommentare oder schmutzige Daten sein, die in CDATA verschachtelt sind. Um die Genauigkeit der Datenanalyse zu gewährleisten, können wir den XML -Inhalt mithilfe der XML_Parse -Funktion von PHP und regulären Ausdrücken zur Löschung dieser Interferenzelemente und die Verbesserung der Parsing -Effizienz und der Datenzuverlässigkeit vorabhalten.
XML_PARSE ist ein von PHP bereitgestellter XML -Parser, der auf dem Expat XML -Parser basiert. Es kann das Segment von XML -Zeichenfolgen nach Segment- und Verarbeitungsknoten durch Rückruffunktionen lesen. XML_Parse hat jedoch extrem hohe Anforderungen für das XML -Format. Wenn es in XML illegale Zeichen oder Formatfehler gibt, kehrt dies direkt zum Scheitern zurück.
Die Beispielnutzung lautet wie folgt:
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
$xml_data = file_get_contents("https://m66.net/sample.xml");
if (!xml_parse($xml_parser, $xml_data, true)) {
die("XML Analyse fehlgeschlagen: " . xml_error_string(xml_get_error_code($xml_parser)));
}
xml_parser_free($xml_parser);
function startElement($parser, $name, $attrs) {
echo "Element starten: $name\n";
}
function endElement($parser, $name) {
echo "Endelement: $name\n";
}
function characterData($parser, $data) {
echo "Dateninhalt: $data\n";
}
Dieser Code liest Remote XML und verwendet eine Rückruffunktion, um jeden Tag- und Datenknoten Schritt für Schritt zu verarbeiten. Wenn die XML jedoch illegale Zeichen wie Steuerzeichen oder unvollständige CDATA -Knoten enthält, tritt ein analysierendes Versagen auf.
Damit XML_Parse ordnungsgemäß funktioniert, müssen die Geräuschinformationen in der XML vor der Parsen gereinigt werden. Dies kann mit regulären Ausdrücken effizient erfolgen. Gemeinsame "Rauschen" umfassen:
Steuerzeichen (wie ASCII 0-31)
Illegale HTML-Kommentare (z. B. <! ----> oder Skripte enthalten)
Verschachtelte falsche Tags
Zusätzliche Weißespace oder Linienpause
Hier sind einige Verarbeitungsbeispiele:
function cleanXmlData($xml) {
// Entfernen Sie illegale Steuerzeichen
$xml = preg_replace('/[^\x09\x0A\x0D\x20-\x7E\xA0-\xFF]/u', '', $xml);
// Kommentarinhalt entfernen
$xml = preg_replace('/<!--.*?-->/s', '', $xml);
// Ersetzen Sie das ungültige leere Tag -Format
$xml = preg_replace('/<(\w+)[^>]*>\s*<\/\1>/', '', $xml);
// Aufräumen CDATA Skript ausblenden oder Inhalte injizieren in
$xml = preg_replace('/<!\[CDATA\[(.*?)\]\]>/s', function($matches) {
$content = $matches[1];
// Inhalt kann bei Bedarf gefiltert werden,Zum Beispiel entfernen <script>
$content = preg_replace('/<script.*?>.*?<\/script>/is', '', $content);
return "<![CDATA[$content]]>";
}, $xml);
return $xml;
}
Integrieren Sie die Reinigungsschritte und den XML -Parser:
$raw_xml = file_get_contents("https://m66.net/raw-feed.xml");
$clean_xml = cleanXmlData($raw_xml);
$parser = xml_parser_create();
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");
if (!xml_parse($parser, $clean_xml, true)) {
die("Aufräumen后 XML Analyse fehlgeschlagen: " . xml_error_string(xml_get_error_code($parser)));
}
xml_parser_free($parser);
Auf diese Weise kann auch wenn in der ursprünglichen XML -Datei laute Informationen vorhanden sind, sie kann nach der Reinigung erfolgreich analysiert werden und die Systemstabilität verbessert.
Die Kombination der Reinigungsmethoden von XML_Parse und regulären Ausdrücken kann unsere Fehlertoleranz bei der Verarbeitung von XML -Daten erheblich verbessern. Die Regelmäßigkeit kann schwach strukturierte "schmutzige" Daten verarbeiten, während XML_Parse gut strukturierte XML-Dokumente effizient verarbeiten kann. Die Kombination der beiden eignet sich für Systemszenarien wie Protokollanalyse, Datenerfassung, API -Gateways usw., die stark auf XML beruhen.
Denken Sie immer daran: Datenvorverarbeitung ist der erste Schritt zum erfolgreichen Parsen.