我正在创建一个简单的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文件包含更多数据,但我只想要几个项目。如果需要任何附加信息,请询问。
我没有经验,但如果它会提高效率,我会调查它。
答案 0 :(得分:0)
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);
}
}