Java:在org.w3c.dom文档中获取元素的xpath
发布时间:2020-12-15 00:49:55 所属栏目:Java 来源:网络整理
导读:我写了我想要达到的目标.但是,getElementIdx()函数不会返回正确的计数. getPreviousSibling()存在问题,但我不知道为什么. public static String getElementXpath(DOMElement elt){ String path = ""; try{ for (; elt != null; elt = (DOMElement) elt.getPa
我写了我想要达到的目标.但是,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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |