2012-06-19 64 views
0

我正在創建一個與文件字符串一起工作的工具,我需要獲取發現節點的行號。這是,我有這樣的:如何獲取文檔行?

$dom = new DOMDocument('1.0'); 
$dom->loadHTML($html); 
$xpath = new DOMXPath($dom); 
foreach ($xpath->query("//text()") as $q) { 
    // $line = WHAT??? 
    $strings[trim($q->nodeValue)] = $line; 
} 

,我需要知道在哪個行開始,我在存儲陣列$strings字符串。有可能得到它嗎?

+0

不幸的是,這是不可能的。 – Jon

回答

1

每個DOMNode對象都有一個返回此值的getLineNo()函數。你的情況是,從DOMNode延伸DOMText對象:

foreach ($xpath->query("//text()") as $q) { 
    $line = $q->getLineNo(); 
    $strings[trim($q->nodeValue)] = $line; 
} 

您可能需要升級到PHP 5.3,如果您還沒有利用該功能。

+1

[顯然這種方法是越野](http://bg2.php.net/manual/en/domnode.getlineno.php#usernotes),尤其是文本節點。 – lanzz

+0

我在這裏得到一個包裝,例如第65536行是0,65537是1等。在Windows XP 32位上使用PHP 5.3.10或在Linux 64位上使用某些PHP 5.4。我會說這與libxml版本和使用的編譯類型有關。正如https://bugzilla.gnome.org/show_bug.cgi?id=676026所述,這是SAX庫中的限制。 – hakre

+0

@lanzz:相關的PHP Bugreport是:[錯誤#54138 DOMNode :: getLineNo()不會返回高於65535的行號](https://bugs.php.net/bug.php?id=54138),我已經列出了更多的資源作爲評論,這個bug可能不值得修復它。如果您不這麼認爲,您可以參與libxml2項目,該項目負責管理底層庫並接受補丁。 – hakre