2011-03-17 36 views
0

我已經翻譯下面的JavaScript代碼到Java。這個問題出現在同胞身上; http://snippets.dzone.com/posts/show/3754定義:不能轉換org.w3c.dom.domElement爲boolean

我從來沒有見過這樣的語句。當你添加分號時它做了什麼?這是像()語句嗎?如果SIB被定義

public static String getElementXpath(DOMElement elt){ 
     String path = ""; 
     for (;elt.ELEMENT_NODE == elt.getNodeType(); elt = (DOMElement) elt.getParentNode()){ 
      int idx = getElementIdx(elt); 
     } 
     return path;   
    } 

    private static int getElementIdx(DOMElement elt) { 
     int count = 1; 

     for (DOMElement sib = (DOMElement) elt.getPreviousSibling(); sib ; sib = (DOMElement) sib.getPreviousSibling()) 
      { 
       if(sib.ELEMENT_NODE == sib.getNodeType() && sib.getTagName() == elt.getTagName()) count++; 
      } 

     return count; 
    } 
+1

是根這是一個關於DOM的問題,還是關於Java for-loops如何工作的問題? – skaffman 2011-03-17 23:05:44

回答

1

如果你的意思是第一for循環:

for (;elt.ELEMENT_NODE == elt.getNodeType(); elt = (DOMElement) elt.getParentNode()) 

則初始;表示沒有初始化工作要做。

正常for循環是:爲(初始化; 表達; 更新所以你的一個只具有表達更新份。有沒有必要針對你的情況初始化,因爲DOMElement傳遞作爲一個參數,並在使用它之前在for循環


在迴應置評不需要任何其他步驟:

在循環的每次迭代之前,執行測試elt.ELEMENT_NODE == elt.getNodeType()。此測試通過elt引用的節點是一個元素節點(即,不是一個文本節點,屬性節點,註釋節點等)。如果測試失敗,則執行循環的主體。

在循環體,getElementIdx被調用以calcuate該節點的相對位置之間具有相同名稱的任何兄弟姐妹。該值存儲在idx中,但沒有做任何處理,然後該值被丟棄。

執行循環體後,將更新elt = (DOMElement) elt.getParentNode()被執行。這會更改elt以引用它之前引用的節點的父節點。

作爲第一步,我會改變elt.ELEMENT_NODE == elt.getNodeType()Node.DOCUMENT_NODE == elt.getNodeType()(請參閱下面聖保羅Ebermann評論),因爲這會導致你的程序通過父節點下班回來,直到找到該文件

+0

那麼這是否意味着基本上,在每次迭代中,elt =父節點?所以當沒有更多的父節點時,它會停止? – KJW 2011-03-18 01:11:14

+0

我已經添加了一些細節來回答處理您的評論 – barrowc 2011-03-19 01:05:42

+1

對於'ELEMENT_NODE'(或'DOCUMENT_NODE')不變,更好的,而不是指它與一些對象使用'Node.ELEMENT_NODE' - 這是減少混亂。 – 2011-03-19 01:22:42

3

在JavaScript中,for語句for (DOMElement sib = (DOMElement) elt.getPreviousSibling(); sib ; sib = (DOMElement) sib.getPreviousSibling())(這是; sib;)第二部分中,將被檢查。要將其轉換爲Java,您需要執行; sib != null;。這應該是等同的。

所以整個for語句變成for (DOMElement sib = (DOMElement) elt.getPreviousSibling(); sib != null ; sib = (DOMElement) sib.getPreviousSibling())

相關問題