当您使用 libxml 2.9 或更高版本时,65535 行号限制不再是问题,但您必须显式启用对大行号的支持
<?php
define('XML_PARSE_BIG_LINES', 4194304);
$dom = new DOMDocument;
$dom->loadXML($xml, XML_PARSE_BIG_LINES);
?>
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
DOMNode::getLineNo — 获取节点的行号
此函数没有参数。
返回解析时节点定义所在的行号。如果节点是手动创建的,则返回值将为 0
。
示例 #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('The <node> tag is defined on line %d', $dom->getElementsByTagName('node')->item(0)->getLineNo());
?>
上面的示例将输出
The <node> tag is defined in line 3
当您使用 libxml 2.9 或更高版本时,65535 行号限制不再是问题,但您必须显式启用对大行号的支持
<?php
define('XML_PARSE_BIG_LINES', 4194304);
$dom = new DOMDocument;
$dom->loadXML($xml, XML_PARSE_BIG_LINES);
?>
此函数有错误。它并不总是返回正确的行号,特别是对于文本元素。作为替代,您可以执行以下操作
<?php
$text = $node->ownerDocument->saveXML($node);
$line += substr_count($text, "\n");
?>
您需要保留对 $line 的引用(从 0 开始),并在递归解析文档时对其进行添加。
为了使此方法有效,您必须在加载文档之前告诉 DOMDocument 保留空白。
DOMNode::getLineNo() 方法由于 libxml2 错误而无法正常工作。
https://bugzilla.gnome.org/show_bug.cgi?id=676026