gpt4 book ai didi

Java:如何加速给定 w3c dom 文档的 xpath 字符串生成?

转载 作者:行者123 更新时间:2023-12-03 15:59:03 24 4
gpt4 key购买 nike

我有以下方法,它采用 org.w3c.dom.Document 并生成绝对 xpath 字符串。

我注意到浏览一个页面上的数百个元素需要很长时间。

有没有什么方法可以加快它的速度,或者有什么不同的方法吗?

重要说明:我只得到 org.w3c.dom 文件

   public String getElementXpath(DOMElement elt){
String path = "";

for (Node fib = (Node) elt; fib != null; fib = fib.getParentNode()){
if (fib.getNodeType() == Node.ELEMENT_NODE){

DOMElement thisparent = (DOMElement) fib;
int idx = getElementIdx(thisparent);
String xname = thisparent.getTagName();

if (idx >= 1) xname += "[" + idx + "]";
path = "/" + xname + path;
}
}
return path;
}

private int getElementIdx(DOMElement elt) {
int count = 1;
for (Node sib = elt.getPreviousSibling(); sib != null; sib = sib.getPreviousSibling())
{
if (sib.getNodeType() == Node.ELEMENT_NODE){
DOMElement thiselement = (DOMElement) sib;
if(thiselement.getTagName().equals(elt.getTagName())){
count++;
}
}
}

return count;
}

最佳答案

你的代码在兄弟数量上是O(n^2)(也就是树的最大扇出)。

给定任何 DOM 问题,更好的方法总是避免使用 DOM!但我不知道这是否适合您的情况。

一个不太激进的改变是改变你的代码,这样当它遍历一个节点的子节点时,它维护一个 HashMap ,其中包含遇到的每个元素名称,具有该名称的元素的数量,然后使用此信息来生成下标(索引)而不是通过所有 previous sibling 姐妹倒数。

关于Java:如何加速给定 w3c dom 文档的 xpath 字符串生成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6501293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com