DOMNode::getLineNo

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

DOMNode::getLineNoПолучить номер строки узла

Описание

public DOMNode::getLineNo(): int

Возвращает номер строки, в которой определён узел.

Список параметров

У этой функции нет параметров.

Возвращаемые значения

Всегда возвращает номер строки, в которой был определён узел.

Примеры

Пример #1 Пример использования DOMNode::getLineNo()

<?php
// Определение необходимого для примера XML
$xml = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<root>
    <node />
</root>
XML;

// Создание нового экземпляра DOMDocument
$dom = new DOMDocument;

// Загрузка XML
$dom->loadXML($xml);

// Вывод номер строки, в которой определён элемент 'node'
printf('Тег <node> определён в строке %d'$dom->getElementsByTagName('node')->item(0)->getLineNo());
?>

Результат выполнения данного примера:

Тег <node> определён в строке 3

add a note add a note

User Contributed Notes 3 notes

up
3
ruud at vanmelick dot com
7 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
0
Anonymous
9 years ago
The DOMNode::getLineNo() method doesn't work properly due to a libxml2 bug.

https://bugzilla.gnome.org/show_bug.cgi?id=676026
up
0
luke dot NOREPLY at webconnex dot com
10 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.
To Top