ここでJavascript関数を翻訳しようとしています。
これにより、org.w3c.dom.DOMElementを指定して基本的なxpath文字列が生成されます。/html/body/p[3]/a
getElementXpath
getElementIdx()
関数と条件をコメントアウトすると正常に動作します。問題はにあるようですがgetElementIdx()
、何が間違っているのかわかりません。以下のJavaコードはJavascriptバージョンとほぼ同じです。
何が起こるかというと、空の文字列が返されます!getElementXpath
関数内のパスを印刷してみましたが、悪意はありませんでした。期待される出力は、基本的なxpath文字列です。
アップデート:
public static String getElementXpath(DOMElement elt){
String path = "";
for (; elt != null && elt.ELEMENT_NODE == elt.getNodeType(); elt = (DOMElement) elt.getParentNode()){
path = "test";
System.out.println(path); //this prints out fine.
}
System.out.println(path); //nothing is printed!
return path;
}
forループの外側でパスが出力されないのはなぜですか?
public static void main(String[] args){
DOMDocument domDocument = (DOMDocument) browser.getDocument();
DOMElement currentElement = (DOMElement) domDocument.getElementFromId("uniqueLink");
System.out.println(getElementXpath(currentElement));
}
public static String getElementXpath(DOMElement elt){
String path = "";
for (; elt != null && elt.ELEMENT_NODE == elt.getNodeType(); elt = (DOMElement) elt.getParentNode()){
int idx = getElementIdx(elt);
String xname = elt.getTagName();
if (idx > 1) xname += "[" + idx + "]";
path = "/" + xname + path;
}
System.out.println(path);
return path;
}
public static int getElementIdx(DOMElement elt) {
int count = 1;
for (DOMElement sib = (DOMElement) elt.getPreviousSibling(); sib != null; sib = (DOMElement) sib.getPreviousSibling())
{
if(sib.ELEMENT_NODE == sib.getNodeType() && sib.getTagName().equals(elt.getTagName())){
count++;
}
}
return count;
}