java如何dom获取_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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值