Start · Sprachen · PHP · Referenz · xml_get_current_column_number

xml_get_current_column_number

Funktion

Gibt die aktuelle Spaltennummer zurück, auf der sich der XML-Parser innerhalb des zuletzt verarbeiteten Bytes befindet.

seit PHP 4.0.0 Kategorie: xml

Signatur

xml_get_current_column_number(XMLParser $parser): int

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

Typ
int
Beschreibung
Gibt die aktuelle Spaltennummer (ab 1 gezählt) zurück, auf der sich der Parser im zuletzt verarbeiteten Datenblock befindet. Bei einem ungültigen Parser-Handle wird 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);
XML-Fehler: mismatched tag Zeile: 4, Spalte: 1

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 &lt;{$name}&gt; 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);
Element <CATALOG> gefunden bei Zeile 1, Spalte 38 Element <BOOK> gefunden bei Zeile 1, Spalte 47 Element <TITLE> gefunden bei Zeile 1, Spalte 57

// 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.