The DOMNode::getLineNo() method doesn't work properly due to a libxml2 bug.
https://bugzilla.gnome.org/show_bug.cgi?id=676026
DOMNode::getLineNo
(PHP 5 >= 5.3.0)
DOMNode::getLineNo — Obtener el número de línea de un nodo
Descripción
public int DOMNode::getLineNo
( void
)
Obtiene el número de línea donde está definido el nodo.
Parámetros
Esta función no tiene parámetros.
Valores devueltos
Siempre devuelve el número de línea donde está definido el nodo.
Ejemplos
Ejemplo #1 Ejemplo de DOMNode::getLineNo()
<?php
// XML dump for below example
$xml = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<root>
<node />
</root>
XML;
// Crear una nueva instancia de DOMDocument
$dom = new DOMDocument;
// Cargar el XML
$dom->loadXML($xml);
// Imprimir la línea donde el elemento 'node' fue definido
printf('La etiqueta <node> está definida en la línea %d', $dom->getElementsByTagName('node')->item(0)->getLineNo());
?>
El resultado del ejemplo sería:
La etiqueta <node> está definida en la línea 3
Anonymous ¶
1 year ago
luke dot NOREPLY at webconnex dot com ¶
2 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.
