DOMNode::getLineNo

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

DOMNode::getLineNoObtiene el número de línea de un nodo

Descripción

public DOMNode::getLineNo(): int

Obtiene el número de línea en el que el nodo fue definido durante el análisis.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve el número de línea en el que el nodo fue definido durante el análisis. Si el nodo fue creado manualmente, el valor devuelto será 0.

Ejemplos

Ejemplo #1 Ejemplo con DOMNode::getLineNo()

<?php
// XML de ejemplo
$xml = <<<XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
<node />
</root>
XML;

// Creación de un objeto DOMDocument
$dom = new DOMDocument;

// Carga del XML
$dom->loadXML($xml);

// Muestra el número de línea del nodo.
printf('El nodo <node> está definido en la línea %d', $dom->getElementsByTagName('node')->item(0)->getLineNo());
?>

El resultado del ejemplo sería:

El nodo <node> está definido en la línea 3

add a note

User Contributed Notes 3 notes

up
3
ruud at vanmelick dot com
11 years ago
The 65535 line number limit is no longer a problem when you use libxml 2.9 or higher, but you have to explicitly enable support for big line numbers:

<?php
define
('XML_PARSE_BIG_LINES', 4194304);
$dom = new DOMDocument;
$dom->loadXML($xml, XML_PARSE_BIG_LINES);
?>
up
1
luke dot NOREPLY at webconnex dot com
14 years ago
This function is buggy. It doesn't always return the correct line number, especially for text elements. As an alternative you can do something like this:

<?php
$text
= $node->ownerDocument->saveXML($node);
$line += substr_count($text, "\n");
?>

You'll want to keep a reference to $line (starting at 0) and add to it as you parse over the document recursively.

In order for this to work you have to tell DOMDocument to preserve white space before loading the document.
up
0
Anonymous
13 years ago
The DOMNode::getLineNo() method doesn't work properly due to a libxml2 bug.

https://bugzilla.gnome.org/show_bug.cgi?id=676026
To Top