Java中的XML解析项目

时间:2013-07-17 10:43:40

标签: xml-parsing

我正在写这条消息,因为我想请你帮忙在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}}

0 个答案:

没有答案