Signatur
Beschreibung
xml_get_current_column_number() liefert die Spaltennummer der aktuellen Position des XML-Parsers innerhalb des zuletzt geparsten Datenblocks. Diese Funktion ist besonders nützlich in Fehler-Callbacks, um dem Entwickler oder dem Endnutzer die genaue Position eines XML-Fehlers innerhalb einer Zeile mitzuteilen.
In Kombination mit xml_get_current_line_number() und xml_get_error_code() lassen sich präzise, aussagekräftige Fehlermeldungen erstellen, die Zeile und Spalte des problematischen Zeichens angeben. Dies erleichtert das Debugging von fehlerhaften XML-Dokumenten erheblich.
Die Spalten werden ab 1 gezählt. Die zurückgegebene Zahl bezieht sich auf die Byte-Position innerhalb der aktuellen Zeile, nicht auf die Zeichenposition bei Multibyte-Encodings. Dies ist bei UTF-8-kodierten Dokumenten mit Nicht-ASCII-Zeichen zu beachten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $parser Pflicht | XMLParser | Eine gültige XMLParser-Instanz, die zuvor mit xml_parser_create() oder xml_parser_create_ns() erzeugt wurde. |
Rückgabewert
false zurückgegeben.Beispiele
Spaltennummer bei einem XML-Fehler ausgeben
<?php
$xml = '<?xml version="1.0"?>
<root>
<item>Wert</item
</root>';
$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);
$column = xml_get_current_column_number($parser);
echo "XML-Fehler: {$errorMsg}\n";
echo "Zeile: {$line}, Spalte: {$column}\n";
}
xml_parser_free($parser);
Spaltennummer während des Parsens in einem Element-Handler verwenden
<?php
function startElement(XMLParser $parser, string $name, array $attrs): void
{
$line = xml_get_current_line_number($parser);
$column = xml_get_current_column_number($parser);
echo "Element <{$name}> gefunden bei Zeile {$line}, Spalte {$column}\n";
}
$xml = '<?xml version="1.0"?><catalog><book id="1"><title>PHP lernen</title></book></catalog>';
$parser = xml_parser_create();
xml_set_element_handler($parser, 'startElement', null);
xml_parse($parser, $xml, true);
xml_parser_free($parser);
// Wichtig · Fallstricke
Byte- vs. Zeichenposition: Die zurückgegebene Spaltennummer basiert auf Bytes, nicht auf Unicode-Zeichen. Bei UTF-8-Dokumenten mit Multibyte-Zeichen (z. B. deutschen Umlauten oder Emoji) kann die Spaltennummer von der tatsächlichen sichtbaren Zeichenposition abweichen.
Ab PHP 8.0.0 akzeptiert die Funktion ein XMLParser-Objekt statt einer Ressource. Älterer Code, der eine Ressource übergibt, sollte entsprechend angepasst werden.