用Element root = doc.getRootElement();
   java.util.List ls = root.getChildren();可以获取xml文件的根节点。可问题是我的XML文件有两个根节点,一解析就出错 Exception in thread "main" java.lang.Exception: [xmlToMap发生异常]org.jdom.input.JDOMParseException: Error on line 1: The content of elements must consist of well-formed character data or up.
我的XML文件是从服务器接收到的, 
<?xml version="1.0" encoding="GB2312" ?> 
  <xml-body>
  <MSGSTATUS COMMANDID="02"> 
     MESSAGE 
  </MSGSTATUS>   <Msg id="1">
    <ID>20070406050417983701</ID> 
    <STAT>NULL</STAT> 
    <ERR>NULL</ERR> 
   </Msg>  </Msg> </xml-body>我认为MESGSTATUS和Msg节点是并列的,无法获取根节点是哪一个。
我应该怎么获取所有节点的文本值呢?比如<ID>20070406050417983701</ID> 中的20070406050417983701。首先遇到的问题是程序无法找到根节点 。

解决方案 »

  1.   

    根节点是xml-body,MESGSTATUS和Msg都是子节点
    你的文件有问题,有个Msg不是成对出现的
      

  2.   

    首先跟节点只有一个,并且</Msg>多写了一个。
      

  3.   

    自己测试下吧。很简单
    package com.java91.xml;import java.io.*;
    import java.util.ArrayList;
    import java.util.Date;import java.util.List;import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.JDOMException;import org.jdom.input.SAXBuilder;
    import org.jdom.output.XMLOutputter;
    import com.java91.lesson01.bean.Student;public class JDomTest { public void readXML(String filename) { SAXBuilder builder = new SAXBuilder(false); // 使用JDOM首先要指定使用什么解析器,这表示使用的是默认的解析器 try { Document doc = builder.build(new File(filename)); // 得到Document Element students = doc.getRootElement(); // 得到根元素

    List studentList = students.getChildren("student"); // 得到元素(节点)的集合 List list = new ArrayList();
    Student stu; for (int i = 0; i < studentList.size(); i++) {
    stu = new Student(); Element stuElement = (Element) studentList.get(i);
    System.out.println("元素date:" + stuElement.getAttributeValue("date")); stu.setSno(stuElement.getChildText("sno"));
    stu.setSname(stuElement.getChildText("sname"));
    stu.setAge(Integer.valueOf(stuElement.getChildText("age")).intValue());
    stu.setSex(stuElement.getChildText("sex"));
    stu.setGrade(Integer.valueOf(stuElement.getChildText("grade")).intValue());
    list.add(stu); // stuElement.getChild("sname").setText("赵六"); //设置元素的值
    // stuElement.getAttribute("date").setValue(new
    // Date().toLocaleString()); //设置元素属性的值 } // 保存Document的修改到XML文件中 // XMLOutputter outputter = new XMLOutputter();
    // outputter.output(doc, new FileOutputStream(filename));

    System.out.println(list.toString()); } catch (JDOMException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void createXML(String filename, List stuList) throws Exception { Element root = new Element("students");
    Document Doc = new Document(root); Student student;
    for (int i = 0; i < stuList.size(); i++) {
    student = (Student) stuList.get(i); Element studentE = new Element("student"); studentE.setAttribute("date", new Date().toLocaleString()); studentE.addContent(new Element("sno").setText(student.getSno()));
    studentE.addContent(new Element("sname").setText(student.getSname()));
    studentE.addContent(new Element("age").setText("" + student.getAge()));
    studentE.addContent(new Element("sex").setText(student.getSex()));
    studentE.addContent(new Element("grade").setText("" + student.getGrade())); root.addContent(studentE);
    }
    XMLOutputter XMLOut = new XMLOutputter();
    XMLOut.output(Doc, new FileOutputStream(filename));
    } public static void main(String[] args) throws Exception {
    JDomTest cx = new JDomTest();
    List stuList = new ArrayList();
    stuList.add(new Student("s01", "张三", 18, "M", 98));
    stuList.add(new Student("s02", "张三", 18, "M", 98)); // cx.createXML("src/com/java91/xml/Student2.xml", stuList);  cx.readXML("src/com/java91/xml/Student.xml"); }}