[英]What would be the optimal to parse XML files into objects? (Java)
我正在制作一个简单的JavaFX应用程序,以制作一个表,用于以XML格式对BLASTP输出进行数据分析。 它的运行速度并没有令人难以置信的慢,但我只想使该程序尽可能高效。 我添加的代码减少了很多,因为实际文件很大,但它们传达了总体轮廓。 我不是在寻找有人为我编写代码,而只是在需要加载大量xml时的建议,例如查看此api或尝试将文件加载到该对象中。 表的xml如下:
从FileChooser收集文件
public void listChange() throws //ALLEXCEPTIONS// {
List<File> files = fc.showOpenMultipleDialog(new Stage());
if (files != null) {
files.forEach(f -> {
try {
xmlDataList.add(XMLFile(f.getPath()));
} catch (//ALLEXCEPTIONS//) {
e.printStackTrace();
}
});
}
}
通过SAX解析器将文件运行到对象XMLDATA中
public XMLData XMLFile(String path) throws //ALLEXCEPTIONS// {
if (path.endsWith(".xml")) {
SAXParserFactory parserFactor = SAXParserFactory.newInstance();
SAXHandler saxh = new SAXHandler();
SAXParser parser = parserFactor.newSAXParser();
parser.parse(path, saxh);
int suffix = 1;
String pname = path.substring(path.lastIndexOf("\\")+1, path.length() - 4), temp = pname;
ArrayList<String> xmldataname = new ArrayList<>();
xmlDataArrayListist.forEach(x -> xmldataname.add(x.pName));
System.out.println("Finished");
return new XMLData(saxh.hitList, temp);
}
else{
return null;
}
}
SAX处理程序创建一个称为HSPS(高分蛋白质序列)的对象列表,该对象内的另一个对象是HSP(高分蛋白质)。
public class SAXHandler extends DefaultHandler {
public ArrayList<HSPS> hitList = new ArrayList<>();
@Override
public void startElement(String u, String ln, String ele, Attributes at)
throws SAXException {
switch(ele){
case "Hit":
hsps = new HSPS();
break;
case "Hsp":
hsp = new HSP();
break;
}
}
@Override
public void endElement(String uri, String ln,String ele) throws SAXException {
switch(ele){
case "Hit_hsps":
hitList.add(hsps);
break;
case "Hsp":
hsps.hspL.add(hsp);
break;
case "Hit_def":
hsps.name = content;
break;
case "Hit_id":
hsps.id = content;
break;
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
content = String.copyValueOf(ch, start, length);
}
}
HSPS对象包含HSP列表以及这些序列所属的蛋白质的名称。 HSP对象包含许多带有数据的字符串。 该表仅读取XMLFile对象内HSPS中的所有HSP。
因此,毕竟我想我的问题是,这是将正确项目转移到表格的最佳方法吗? xml文件包含大量的更多数据,但我只需要一些项目。 如果需要任何其他信息,只需询问。
我没有同意的经验,但是如果能提高效率,我会研究一下。
Try simple-xml very simple as name suggested.
Maven依赖
<dependency>
<groupId>org.simpleframework</groupId>
<artifactId>simple-xml</artifactId>
<scope>compile</scope>
<version>2.7.1</version>
</dependency>
样例代码
package com.vibhs.stack.overflow.xml;
import java.io.File;
import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;
public class Parser {
private Serializer serializer = new Persister();
public void createXML(Object object, File destination) throws Exception {
serializer.write(object, destination);
}
public Object readXML(Class<?> clazz, File source) throws Exception {
return serializer.read(clazz, source);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.