我正在写这条消息,因为我想请你帮忙在java中为以下XML创建一个解析器:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<phyloxml xmlns='http://www.phyloxml.org'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xsi:schemaLocation='http://www.phyloxml.org
http://www.phyloxml.org/1.10/phyloxml.xsd'>
<phylogeny rooted='true'>
<clade>
<clade>
<clade branch_length='4.25'>
<clade branch_length='3.5'>
<clade branch_length='3.5'>
<name>B</name>
</clade>
<clade branch_length='3.5'>
<name>C</name>
</clade>
</clade>
<clade branch_length='7.0'>
<name>D</name>
</clade>
</clade>
<clade branch_length='10.25'>
<clade branch_length='1.0'>
<name>A</name>
</clade>
<clade branch_length='1.0'>
<name>E</name>
</clade>
</clade>
</clade>
</clade>
<name>description</name>
<description />
</phylogeny>
</phyloxml>
我正在努力工作3天,我没有想出任何工作。我刚刚开始使用java xml解析,这可能就是我做得不好的原因。我需要根据树结构(分支长度)(从最小的组到最大的组)将分组的名称(es“A B C”)分组。因此,我应该有一个ArrayList,每个元素根据分支长度表示一组名称(es:A,B,C ...)。例如。 A,E是arraylist的一个元素,{B C D}是另一个...... {B C},{B C D A E}。 对于这个xml,我应该有一个像这样的ArrayList:[{D},{B,C},{A,E},{B C D},{A E B C D}]。 有人可以帮我解析吗?我真的很感激。
Ps:在示例中我使用的是字符串名称但在实际文件中我需要使用数字(id)而不是字符串。对不起,缩进btw。
我这样做了,我被困住了:
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.File;
public class JavaApplication4 {
public static void main(String argv[]) {
try {
File fXmlFile = new File("C:/Users/GQ/workspace/UPGMA Algorithm/b.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
//optional, but recommended
//read this - http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work
doc.getDocumentElement().normalize();
System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
NodeList nList = doc.getElementsByTagName("clade");
System.out.println("----------------------------");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
System.out.println("\nCurrent Element :" + nNode.getNodeName());
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
System.out.println("branch length : " + eElement.getAttribute("branch_length"));
System.out.println("Name : " + eElement.getElementsByTagName("name").item(0).getTextContent());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
我不知道如何识别分支内的分支名称。我有一个长度为4,25的分支,其中有一个分支名称为D,另一个分支的分支名称为B和C.有人可以帮助我吗?谢谢
这是我的xml文件的图形表示,只是为了清楚我想做什么。 http://i39.tinypic.com/2lna89x.jpg
我必须将所有可能的组存储到数组列表中。他们必须通过他们的分支布局来锻炼。 对于这个xml.file,我必须有一个arraylist如下 {{A,E},{B,C},{D},{B,C,D},{A,E,B,CD}}