簡體   English   中英

php xpath-獲取節點位置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM