一、前言
HTTP网络传输中的数据组织方式有三种方式:
(1)HTML方式 (2)XML方式 (3)JSON方式
今天主要讲解的是对XML文件的解析
二、对XML文件的介绍
在百度百科中定义为可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。它的文件结构中包括了节点、元素、属性和属性值,其语法规则为(1)开始和结束标签匹配 (2)嵌套标签不能互相嵌套 (3) 区分大小写。
三、解析XML数据的方式
1、DOM(org.w3c.dom)
“文档对象模型”方式,解析完的Xml将生成一个树状结构的对象。
2、SAX(org.xml.sax)
以事件的形式通知程序,对Xml进行解析。
3、XMLPULL(org.xmlpull.v1)
程序以“拉取”的方式对Xml进行解析。
四、实例分析(以DOM方式解析XML文件为例)
这次要实现的使用java编写以DOM方式解析本地某目录下的特定XML文件。
图一 Java工程目录 图二 XML文件的内容
(1)首先需要新建一个用于存储xml文件中各节点的属性和属性值的类
public class Book {
private int id;
private String name;
private float price;
public Book() {
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Book [id=" + id + ", name=" + name + ", price=" + price + "]";
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}
(2)紧接着就是创建一个使用DOM方式解析的工具类
public class DomService {
public DomService() {
// TODO Auto-generated constructor stub
}
public static List<Book> getBooks(InputStream inputStream) throws Exception{
List<Book> list = new ArrayList<Book>();
//创建一个document解析工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//实例化一个DocumentBuilder对象
DocumentBuilder builder = factory.newDocumentBuilder();
//使用DocumentBuilder对象获取一个Document的对象
Document document = builder.parse(inputStream);
Element element = document.getDocumentElement(); //获得元素节点
NodeList nodeList = element.getElementsByTagName("book"); //获取book节点
for(int i=0; i<nodeList.getLength(); i++){
Element bookElement = (Element) nodeList.item(i);
Book book = new Book(); //实例化 Book 对象
book.setId(Integer.parseInt(bookElement.getAttribute("id")));
NodeList childNodes = bookElement.getChildNodes();
for(int j=0; j<childNodes.getLength(); j++){
if(childNodes.item(j).getNodeType() == Node.ELEMENT_NODE){
if("name".equals(childNodes.item(j).getNodeName())){
book.setName(childNodes.item(j).getFirstChild().getNodeValue());
}else if("price".equals(childNodes.item(j).getNodeName())){
book.setPrice(Float.parseFloat(childNodes.item(j).getFirstChild().getNodeValue()));
}
}
}
list.add(book);
}
return list;
}
//xml文件的路径
private static String FilePath = "E:/JavaCode/javaCode/android_dom_xml/book.xml";
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
File file = new File(FilePath);
InputStream inputStream = new FileInputStream(file);
List<Book> list = getBooks(inputStream);
for(Book book:list){
System.out.println(book.toString());
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这个使用DOM方式解析XML文件的源码下载链接:https://download.youkuaiyun.com/download/nxc_boy/10599443