[英]php xpath - get node position
我有以下剝離的PHP代碼...
foreach ($xpath->query('/html/body//a')} as $queryitem) {
$nodeposition = ???;
$parentposition = ???;
}
...由此可以找到每個節點的位置及其父節點的位置?
例如:
0..<html>
1....<head>
2......<title>
3......<meta>
4......<meta>
5....<body>
6......<div>
7........<a>
這將為每個標簽及其加入的父標簽的ID產生一種ID。
因此結果將是= 0 |,1 | 0,2 | 1,3 | 1,4 | 1,5 | 0,6 | 5,7 | 6
如果用“位置”來表示前面節點的數量(如您在示例中似乎暗示的那樣),那么這將起作用(可能不是一流的效率,但是):
foreach ($xpath->query('/html/body//a') as $queryitem) {
$nodeposition = count($xpath->query('preceding::*', $queryitem));
$parent = $xpath->query('parent::*', $queryitem);
if ($parent->length == 1)
$parentposition = count($xpath->query('preceding::*', $parent->item(0)));
else
$parentposition = -1; // or whatever
}
未經測試,但您知道了。
另一種選擇是編寫XSLT身份轉換,該轉換將位置作為屬性添加到文檔中的所有節點。 然后,您可以在PHP代碼中讀取屬性。
我不相信您將無法獲得dom中的位置(讀取xpath),除非您自己進行一些華麗的編碼。
您需要了解完整的DOM樹才能解決此問題。 但是,使用XPath,您只會獲得與路徑匹配的某些子樹。 您將需要一棵樹,並檢索與XPath匹配的每個元素的信息。 但這可能效率不高。 如果您從樹根向下走一棵樹並計算節點數,可能會更好。
在PHP中處理XML的最簡單方法是使用SimpleXML類,並使用Children屬性進行循環。 參見http://nl2.php.net/manual/en/function.simplexml-element-children.php
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.