Причиной получения пустой строки только для only является то, что это выражение оценивается как false:
elt != null && elt.ELEMENT_NODE == elt.getNodeType()
То есть либо элемент, который вы передаете методу, на самом деле null
, либоТип узла элементов не совпадает с elt.ELEMENT_NODE
.Во всех других случаях результат будет, по крайней мере, /
.
Но поскольку вы передаете экземпляр DOMElement
, узел всегда должен иметь тип ELEMENT_NODE
, поэтому я уверен, что domDocument.getElementFromId("uniqueLink")
возвращает null
для вашего текущего документа.Сначала я бы проверил это.
Для пояснения
public static String getElementXpath(DOMElement elt){
String path = "";
try {
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("Inside: " + path); // **1**
}
} catch(Exception e) {
// unhides any exception thrown inside the for loop
e.printStackTrace();
} finally {
// forces a final print of "path", even if a runtime exception was raised
System.out.println("Outside: " + path); // **2**
}
return path;
}
В этом фрагменте вы видите непустые пути в**1**
и пустые пути в **2**
?Пожалуйста, проверьте ваш реальный код, если он совпадает с кодом, который вы вставили в вопрос