當您使用 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('<node> 標籤定義在第 %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 保留空白。
由於 libxml2 錯誤,DOMNode::getLineNo() 方法無法正常運作。
https://bugzilla.gnome.org/show_bug.cgi?id=676026