JAVA解析xml(JDOM,DOM4J)

来源:互联网 发布:淘宝网大童 编辑:程序博客网 时间:2024/06/11 17:12

JDOM解析xml

创建一个SAXBuilder对象,创建输入流  将xml加载到流中,将输入流加载到saxBuilder  返回Document对象

SAXBuilder saxBuilder=new SAXBuilder();InputStream in=new FileInputStream("books.xml");Document document=saxBuilder.build(in);
获取根节点
Element element=document.getRootElement();
获取子节点的集合

List<Element> list_element=element.getChildren();
然后通过ELement的getName与getValue方法进行解析

代码:

public class JdomText { static Book book;static ArrayList<Book> books=new ArrayList<>();public static void main(String[] args) {//创建一个SAXBuilder对象SAXBuilder saxBuilder=new SAXBuilder();try {//创建输入流  将xml加载到流中InputStream in=new FileInputStream("books.xml");//将输入流加载到saxBuilder  返回Document对象Document document=saxBuilder.build(in);            //获取根节点Element element=document.getRootElement();//获取子节点List<Element> list_element=element.getChildren();    for (Element element2 : list_element) {    book=new Book();    System.out.println("开始遍历第"+(list_element.indexOf(element2)+1)+"本书");                //已知属性名获取属性值//System.out.println(element2.getAttributeValue("id"));    //获取属性的集合  遍历获取属性名与内容                List<Attribute> list=element2.getAttributes();                for (Attribute attribute : list) {System.out.print(attribute.getName());System.out.println("------"+attribute.getValue());if (attribute.getName().equals("id")) {book.setId(attribute.getValue());}}                //获取book节点的子节点的集合  进行遍历  输出               List<Element> list2= element2.getChildren();               for (Element element3 : list2) {System.out.print(element3.getName());System.out.println("-----"+element3.getValue());if (element3.getName().equals("name")){book.setName(element3.getValue());}else if (element3.getName().equals("year")){book.setYear(element3.getValue());}else if (element3.getName().equals("price")){book.setPrice(element3.getValue());}}               System.out.println("结束遍历第"+(list_element.indexOf(element2)+1)+"本书");               books.add(book);               book=null;}for (Book book : books) {System.out.println(book.getName()+"+-++-+-+++++");}} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}catch (JDOMException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
DOM4J解析

与JDOM不同在于,这个方法返回的是迭代器,那个是List

代码:

public class Dom4j_test {public static void main(String[] args) {//创建SAXReader对象SAXReader reader=new SAXReader();try {//加载xml文件 Document document= reader.read(new File("books.xml"));//获取根节点Element element=document.getRootElement();//获取迭代器Iterator<Element> iterator=element.elementIterator();while (iterator.hasNext()) {//获取节点Element element2 = (Element) iterator.next();//获取并遍历属性List<Attribute> attributes=element2.attributes();for (Attribute attribute : attributes) {System.out.println(attribute.getName()+"-----"+attribute.getValue());}//获取book节点 的子节点  并遍历  Iterator<Element> iterator2= element2.elementIterator();  while (iterator2.hasNext()) {Element element3 = (Element) iterator2.next();System.out.println(element3.getName()+"-------"+element3.getStringValue());}}} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}