略微加速

PHP官方手册 - 互联网笔记

PHP - Manual: DOMNode::getLineNo

2024-11-15

DOMNode::getLineNo

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

DOMNode::getLineNoGet line number for a node

说明

public DOMNode::getLineNo(): int

Gets line number for where the node is defined.

参数

此函数没有参数。

返回值

Always returns the line number where the node was defined in.

范例

示例 #1 DOMNode::getLineNo() example

<?php
// XML dump for below example
$xml = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<root>
    <node />
</root>
XML;

// Create a new DOMDocument instance
$dom = new DOMDocument;

// Load the XML
$dom->loadXML($xml);

// Print where the line where the 'node' element was defined in
printf('The <node> tag is defined on line %d'$dom->getElementsByTagName('node')->item(0)->getLineNo());
?>

以上例程会输出:

The <node> tag is defined in line 3
add a noteadd a note

User Contributed Notes 3 notes

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

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

官方地址:https://www.php.net/manual/en/domnode.getlineno.php

北京半月雨文化科技有限公司.版权所有 京ICP备12026184号-3