2010-06-18 52 views

回答

0

使用這種getXPath() function

function getXPath(node, path) { 
    path = path || []; 
    if(node.parentNode) { 
     path = getXPath(node.parentNode, path); 
    } 

    if(node.previousSibling) { 
     var count = 1; 
     var sibling = node.previousSibling 
     do { 
     if(sibling.nodeType == 1 && sibling.nodeName == node.nodeName) {count++;} 
     sibling = sibling.previousSibling; 
     } while(sibling); 
     if(count == 1) {count = null;} 
    } else if(node.nextSibling) { 
     var sibling = node.nextSibling; 
     do { 
     if(sibling.nodeType == 1 && sibling.nodeName == node.nodeName) { 
      var count = 1; 
      sibling = null; 
     } else { 
      var count = null; 
      sibling = sibling.previousSibling; 
     } 
     } while(sibling); 
    } 

    if(node.nodeType == 1) { 
     path.push(node.nodeName.toLowerCase() + (node.id ? "[@id='"+node.id+"']" : count > 0 ? "["+count+"]" : '')); 
    } 
    return path; 
    }; 

通過DOM ojbect從firstScene.iterateNext()獲得到getXPath()方法,它將返回一個數組與所有的XPATH步驟。

然後,您可以使用數組join()方法返回一個完整的XPath表達式:

getXPath(firstScene.iterateNext()).join("/"); 
+0

這是行不通的,你在哪裏得到所有的屬性?我調試了程序,XpathResult沒有定義你使用的任何東西,nodeType,nextSibling,previousSibling .... XpathResult.ORDERED_NODE_ITERATOR_TYPE的迭代器只有一個方法來移動到下一個結果節點iterateNext()和屬性來訪問內部值。 – mjsr 2010-06-20 05:30:27

+0

對不起。我測試了'document.getElementById'的結果。我會看看是否可以用XPATH評估的結果來正確評估它。 – 2010-06-20 13:20:35

+0

看起來'getXPath()'方法需要一個DOM對象,並且XPATH表達式的結果不是,但是您可以從'iterateNext()'方法獲得它。我已經用適合我的一些東西糾正了我的答案。 – 2010-06-20 14:43:12