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 — Lit le numéro de ligne d'un noeud
Description
public int DOMNode::getLineNo
( void
)
Lit le numéro de ligne d'un noeud.
Liste de paramètres
Cette fonction ne contient aucun paramètre.
Valeurs de retour
Retourne le numéro de ligne de définition du noeud.
Exemples
Exemple #1 Exemple avec DOMNode::getLineNo()
<?php
// XML de l'exemple
$xml = <<<XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
<node />
</root>
XML;
// Création d'un objet DOMDocument
$dom = new DOMDocument;
// Chargement du XML
$dom->loadXML($xml);
// Affichage du numéro de ligne du noeud.
printf('Le noeud <node> est défini à la ligne %d', $dom->getElementsByTagName('node')->item(0)->getLineNo());
?>
L'exemple ci-dessus va afficher :
Le noeud <node> est défini à la ligne 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.
