DOMNode::getLineNo
(PHP 5 >= 5.3.0, PHP 7)
DOMNode::getLineNo — Возвращает номер строки узла
Описание
public int DOMNode::getLineNo
( void
)
Возвращает номер строки, в которой определен узел.
Список параметров
У этой функции нет параметров.
Возвращаемые значения
Всегда возвращает номер строки, в которой был определен узел.
Примеры
Пример #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
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Обработка XML
- Document Object Model
- Функция DOMNode::appendChild() - Добавляет новый дочерний узел в конец списка потомков
- Функция DOMNode::C14N() - Canonicalize nodes to a string
- Функция DOMNode::C14NFile() - Canonicalize nodes to a file
- Функция DOMNode::cloneNode() - Клонирует узел
- Функция DOMNode::getLineNo() - Возвращает номер строки узла
- Функция DOMNode::getNodePath() - Получение XPath пути к узлу
- Функция DOMNode::hasAttributes() - Проверяет, содержит ли данный узел атрибуты
- Функция DOMNode::hasChildNodes() - Проверяет, содержит ли данный узел потомков
- Функция DOMNode::insertBefore() - Добавляет новый дочерний узел перед опорным узлом
- Функция DOMNode::isDefaultNamespace() - Проверяет, совпадает ли URI пространства имен узла с пространством имен по умолчанию
- Функция DOMNode::isSameNode() - Проверяет, являются ли два узла одним и тем же узлом
- Функция DOMNode::isSupported() - Проверяет, поддерживается ли заданное свойство в определенной версии
- Функция DOMNode::lookupNamespaceURI() - Получает URI пространства имен узла по префиксу
- Функция DOMNode::lookupPrefix() - Возвращает префикс пространства имен узла из URI пространства имен
- Функция DOMNode::normalize() - Нормализует узел
- Функция DOMNode::removeChild() - Удаляет дочерний узел из списка потомков
- Функция DOMNode::replaceChild() - Заменяет дочерний узел
Коментарии
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.
The DOMNode::getLineNo() method doesn't work properly due to a libxml2 bug.
https://bugzilla.gnome.org/show_bug.cgi?id=676026
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);
?>