用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。首先遇到的问题是程序无法找到根节点 。
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。首先遇到的问题是程序无法找到根节点 。
你的文件有问题,有个Msg不是成对出现的
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"); }}