xml的解析

原创 2007年10月11日 10:46:00

本文介绍两种从本地的xml文件中读取数据,并把相关的数据封装到list中的方法,要解析xml,需要先下载dom4j-1.6.1.jar

第一种方法:
首先建立students.xml,保存在E盘下面:

------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="gb2312"?>
<?xml-stylesheet type="text/xsl" href="students.xsl"?>
<students>
<student sn = "01" sm = "11">
<name>张三</name>
<age>15</age>
</student>
<student sn = "02" sm = "22">
<name>李四</name>
<age>16</age>
</student>
</students>
--------------------------------------------------------------------------------------------------

然后建立辅助类:
该类的作用是封装从xml中读出的信息,包括sn,sm,name,age
--------------------------------------------------------------------------------------------------
package com.bsj.cityelife;

public class Attributes {
private String sn;
private String sm;
private String name;
private String age;
public String getAge() {
 return age;
}
public void setAge(String age) {
 this.age = age;
}
public String getSn() {
 return sn;
}
public void setSn(String sn) {
 this.sn = sn;
}
public String getSm() {
 return sm;
}
public void setSm(String sm) {
 this.Sm = sm;
}
public String getName() {
 return name;
}
public void setName(String name) {
 this.name= name;
}

-----------------------------------------------------------------------------------------------------

建立解析xml的类:
该类的作用是解析xml文件,把其中的信息先封装到attributes类中,然后把多个attributes实例封装到list中

------------------------------------------------------------------------------------------------------
package com.bsj.cityelife;

import java.util.ArrayList;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Element;
import org.dom4j.ProcessingInstruction;
import org.dom4j.VisitorSupport;

public class MyVisitor extends VisitorSupport {
 static ArrayList list = new ArrayList();

 Attributes a;

 public void visit(Attribute node) {

  if ("sn".equals(node.getName())) {
   a = new Attributes();

   // System.out.println("attribute"+node.getName()+"="+node.getValue());
   a.setName1(node.getValue());
   //System.out.println(a.getName1());
  } else {
   // System.out.println("attribute"+node.getName()+"="+node.getValue());
   // System.out.println(a.getName1());
   a.setName2(node.getValue());
  }
 }

public void visit(Element node){
       if (node.isTextOnly()){
        if (node.getName().equals("age")){
         a.setName4(node.getText());
         list.add(a);
        }else{
         a.setName3(node.getText());
        }
       }
      } 
public static ArrayList print() {
  return list;
 }

}

---------------------------------------------------------------------------------------------------------------------------

调用MyVisitor的类:
该类调用MyVisitor类,并得到结果集list

---------------------------------------------------------------------------------------------------------------------------
package com.bsj.cityelife;

import java.io.File;
import java.util.ArrayList;

import org.dom4j.*;
import org.dom4j.io.SAXReader;

public class VisitorTest {
 
 public static void main(String[] args){
  SAXReader saxReader = new SAXReader();
  File file = new File("E://students.xml");
  try{
   Document doc = saxReader.read(file);
   doc.accept(new MyVisitor());
  }catch(DocumentException e){
   e.printStackTrace();
  }
  ArrayList list = MyVisitor.print();
  for(int i=0;i<list.size();i++){
   Attributes a = (Attributes) list.get(i);
   System.out.println("--------------------------------");
   System.out.println(a.getName1());
   System.out.println(a.getName2());
   System.out.println(a.getName3());
   System.out.println(a.getName4());
   //System.out.println(a.getName2());
   //System.out.println(a.getName3());
   System.out.println("--------------------------------");
  }
 }   
}

------------------------------------------------------------------------------------------------------------------------------------

 

第二种方法:
这个方法只能读取指定元素的属性,如要读取其它内容,还需改进,但这个方法相对比较简洁
如上,先建立xml,及attributes.java这两个文件,然后通过以下代码读取:

-------------------------------------------------------------------------------------------------------------------------------
package com.bsj.cityelife;

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.dom4j.*;
import org.dom4j.io.SAXReader;

public class VisitorTest {
 
 public static void main(String[] args) throws DocumentException{
  SAXReader saxReader = new SAXReader();
  File file = new File("E://students.xml");
  Document doc = saxReader.read(file);
  Element root=doc.getRootElement();
  List citys=new ArrayList();
     List elements=root.selectNodes("/students/student");
     for(Iterator $it=elements.iterator();$it.hasNext();){
     Element element=(Element)$it.next();       
  String name=element.attributeValue("sn");
  String prefix=element.attributeValue("sm");
  Attributes a = new Attributes();
  a.setSn(name);
  a.setSm(prefix);
  citys.add(a);
  //System.out.println(name);
  //System.out.println(prefix);  
    } 
 }   
}
---------------------------------------------------------------------------------------------------------------------------------------------- 

XML解析——Java中XML的四种解析方式

XML是一种通用的数据交换格式,它的平台无关性、语言无关性、系统无关性、给数据集成与交互带来了极大的方便。XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已。   XML的解析方式...
  • RickyIT
  • RickyIT
  • 2016年12月22日 13:53
  • 8504

解析xml的4种方法详解

1. 介绍 1)DOM(JAXP Crimson解析器)          DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构...
  • jzhf2012
  • jzhf2012
  • 2013年01月23日 10:25
  • 73313

Java解析XML的四种方法详解

Java解析XML的四种方法详解 XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML。本文将详细介绍用Java解析XML的四种方法 XML现在已经成为一...
  • dongfengkuayue
  • dongfengkuayue
  • 2015年12月09日 19:00
  • 117127

Android三种解析XML方式

XML三种解析方式
  • u011310942
  • u011310942
  • 2014年02月18日 21:49
  • 2982

解析xml的四种方式

解析xml的四种方式
  • xinyuan_java
  • xinyuan_java
  • 2017年03月26日 00:10
  • 1308

java解析xml的几种方式

【目录】 一、【基础知识——扫盲】 二、【DOM、SAX、JDOM、DOM4j简单使用介绍】 三、【性能测试】 四、【对比】 五、【小插曲XPath】 六、【补充】...
  • u012868901
  • u012868901
  • 2016年05月26日 15:12
  • 2882

解析XML文件的几种方式

前言虽然更喜欢用json,但是xml更灵活,在配置文件的时候更方便要用SAXRead需要的jar包dom4j-1.6.1.jar, jaxen-1.1-beta-10.jarXML文件格式如下 ...
  • T1DMzks
  • T1DMzks
  • 2017年03月21日 20:30
  • 856

xml有哪些解析技术?区别是什么?

1.DOM生成和解析XML文档 为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。优点:整个文档树在内...
  • lingzhm
  • lingzhm
  • 2015年09月10日 21:27
  • 8857

java中四种方式解析XML文件

1.DOM方式解析XML Dom解析是将xml文件全部载入到内存,组装成一颗dom树,然后通过节点以及节点之间的关系来解析xml文件,与平台无关,java提供的一种基础的解析XML文件的API,理解较...
  • clemontine
  • clemontine
  • 2016年11月02日 20:09
  • 3642

详解Java解析XML的四种方法

XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML。本文将详细介绍用Java解析XML的四种方法。         XML现在已经成为一种通用的数据交换格式,它的平台无...
  • hmiter
  • hmiter
  • 2017年02月14日 21:02
  • 8893
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:xml的解析
举报原因:
原因补充:

(最多只允许输入30个字)