java dom xpath_Java:在org.w3c.dom文档中获取元素的xpath
我寫了我想要達到的目標.但是,getElementIdx()函數不會返回正確的計數. getPrevIoUsSibling()存在問題,但我不知道為什么.
public static String getElementXpath(DOMElement elt){
String path = "";
try{
for (; elt != null; elt = (DOMElement) elt.getParentNode()){
int idx = getElementIdx(elt);
String xname = elt.getTagName().toString();
if (idx >= 1) xname += "[" + idx + "]";
path = "/" + xname + path;
}
}catch(Exception ee){
}
return path;
}
public static int getElementIdx(DOMElement elt) {
int count = 1;
try{
for (DOMElement sib = (DOMElement) elt.getNextSibling(); sib != null; sib = (DOMElement) sib.getNextSibling())
{
if(sib.getTagName().equals(elt.getTagName())){
count++;
}
}
}catch(Exception ee){
}
return count;
}
你的標題談到getPrevIoUsSibling(),但你的代碼只使用getNextSibling() – 為什么?我不明白為什么你想要使用getNextSibling()…你想知道在當前的那個之前有多少同名的元素,而不是在它之后有多少元素.
你捕捉和吞咽異常這一事實也是非常可疑的……你為什么要這樣做呢?如果您有異常,該方法不應該以異常終止嗎?
您還應該考慮到getPrevIoUsSibling可能不返回元素這一事實 – 例如,它可能返回一個文本節點.你想要跳過那些 – 目前你會得到一個異常,它將終止循環并返回當前計數.
如果這些沒有幫助,請發布一些示例XML,指出一個節點,并說明代碼當前返回的內容(以及發布更新的代碼).只是說它沒有返回正確的計數并不像說它返回什么,以及你期望它返回的那樣有用.
編輯:這是我期望代碼看起來像:
public static int getElementIndex(Element original) {
int count = 1;
for (Node node = original.getPrevIoUsSibling(); node != null;
node = node.getPrevIoUsSibling()) {
if (node instanceof Element) {
Element element = (Element) node;
if (element.getTagName().equals(original.getTagName()) {
count++;
}
}
}
return count;
}
您也可以使用if(node.getNodeType()== Node.ELEMENT_NODE)而不是instanceof test.
總結
以上是生活随笔為你收集整理的java dom xpath_Java:在org.w3c.dom文档中获取元素的xpath的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (pytorch-深度学习)循环神经网络
- 下一篇: 二维码提升对比度文献调研(1)--Fas