Signatur
Beschreibung
xml_get_current_line_number() liefert die Zeilennummer innerhalb des XML-Dokuments, die der Parser zuletzt verarbeitet hat. Diese Information ist besonders nützlich beim Debuggen: Tritt ein Fehler auf, kann damit präzise angegeben werden, in welcher Zeile des Eingabedokuments das Problem auftrat.
Die Funktion wird typischerweise zusammen mit xml_get_error_code() und xml_error_string() verwendet, um aussagekräftige Fehlermeldungen zu erzeugen. Sie kann auch innerhalb von Handler-Callbacks aufgerufen werden, um den Fortschritt der Verarbeitung zu verfolgen.
Die Zeilenzählung beginnt bei 1. Jedes Zeilenumbruchzeichen (\n) im verarbeiteten Input erhöht den Zähler um 1. Bei mehrteiligem Parsing mit mehreren xml_parse()-Aufrufen wird der Zähler über alle Aufrufe hinweg kumuliert weitergeführt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $parser Pflicht | XMLParser | Eine gültige XML-Parser-Ressource bzw. (ab PHP 8.0) ein XMLParser-Objekt, das zuvor mit xml_parser_create() erstellt wurde. |
Rückgabewert
int zurück (beginnt bei 1). Gibt false zurück, wenn der übergebene Parameter kein gültiger Parser ist.Beispiele
Fehlermeldung mit Zeilennummer ausgeben
<?php
$xml = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<root>
<item>Korrekt</item>
<broken
</root>
XML;
$parser = xml_parser_create();
if (!xml_parse($parser, $xml, true)) {
$errorCode = xml_get_error_code($parser);
$errorMsg = xml_error_string($errorCode);
$line = xml_get_current_line_number($parser);
echo "XML-Fehler: {$errorMsg} in Zeile {$line}" . PHP_EOL;
}
xml_parser_free($parser);
Zeilennummer im Element-Handler verfolgen
<?php
$xml = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<book id="1">
<title>PHP Handbuch</title>
</book>
<book id="2">
<title>MySQL Grundlagen</title>
</book>
</catalog>
XML;
$parser = xml_parser_create();
xml_set_element_handler(
$parser,
function ($parser, $name, $attrs) {
$line = xml_get_current_line_number($parser);
echo "Start-Tag <{$name}> in Zeile {$line}" . PHP_EOL;
},
function ($parser, $name) {
// End-Handler (leer)
}
);
xml_parse($parser, $xml, true);
xml_parser_free($parser);
// Wichtig · Fallstricke
PHP 8.0: Der Parameter $parser erwartet nun ein Objekt vom Typ XMLParser statt einer Ressource. Älterer Code, der eine Ressource übergab, bleibt dank interner Umstellung kompatibel, sollte aber auf die neue Schreibweise umgestellt werden.
Wird xml_parse() in mehreren Teilaufrufen (Chunked Parsing) verwendet, akkumuliert sich die Zeilennummer über alle Aufrufe, sofern der gleiche Parser wiederverwendet wird. Ein Reset ist nur durch Erstellen eines neuen Parsers möglich.