我想从108个Xml文件中提取特定信息。通用来源也是带有其他URL作为资源的XML文件。 XML-Source 静态方法getURL()提取URL,以便在main方法中的for循环内将它们设置为URL路径。该程序可以工作,但是大约需要花费时间。 5分钟从所有文件中获取数据。任何想法如何提高性能?
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.Namespace;
import org.jdom2.filter.Filters;
import org.jdom2.input.SAXBuilder;
import org.jdom2.xpath.XPathExpression;
import org.jdom2.xpath.XPathFactory;
public class XmlReader2 {
public static void main(String[] args) throws IOException {
for (int i = 0; i < getURL().size(); i++) {
URL url = new URL(getURL().get(i));
try {
Document doc = new SAXBuilder().build(url);
final String getDeath = String
.format("//ns:teiHeader/ns:profileDesc/ns:particDesc/ns:listPerson/ns:person/ns:death");
XPathExpression<Element> xpath = XPathFactory.instance().compile(getDeath, Filters.element(), null,
Namespace.getNamespace("ns", "http://www.tei-c.org/ns/1.0"));
String test;
for (Element elem : xpath.evaluate(doc)) {
test = elem.getValue();
if (elem.getAttributes().size() != 0) {
test = elem.getAttributes().get(0).getValue();
}
System.out.println(elem.getName() + ": " + test);
}
} catch (org.jdom2.JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static List<String> getURL() throws IOException {
List<String> urlList = new ArrayList<>();
URL urlSource = new URL("http://www.steinheim-institut.de:80/cgi-bin/epidat?info=resources-mz1");
try {
Document doc = new SAXBuilder().build(urlSource);
final String getURL = String.format("/collection");
XPathExpression<Element> xpath = XPathFactory.instance().compile(getURL, Filters.element());
int i = 0;
for (Element elem : xpath.evaluate(doc)) {
while (i != elem.getChildren().size()) {
String url = elem.getChildren().get(i).getAttributes().get(1).getValue();
// System.out.println(url);
urlList.add(url);
i++;
}
}
} catch (org.jdom2.JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return urlList;
}
}
答案 0 :(得分:0)
此顺序的延迟可能是由于从网络上获取文件引起的。找到一个工具来监视从您的计算机发出的HTTP请求,以查看发生了什么情况。特别要注意对诸如XHTML DTD之类的常见W3C文件的请求:由于经常请求这些文件,因此W3C故意在过程中添加延迟,以鼓励人们使用文件的本地副本。如果事实证明是问题所在,则可以使用多种技术来访问缓存的本地副本。
话虽如此,我对您代码的逻辑感到困惑。每次调用getURL()
时,方法http://www.steinheim-institut.de:80/cgi-bin/epidat?info=resources-mz1
似乎都在getURL().size()
处获取并解析文档,但是您甚至在循环中都调用了它,甚至使用<Form/>
作为终止条件。>