您的位置:首页 > 编程语言 > Java开发

java解析xml之DOM解析

2016-02-19 18:18 417 查看
DOM(Document Object Model,文档对象模型),Android 完全支持DOM 解析,利用DOM 中的对象,可以对XML 文档进行读取、搜索、修改、添加和删除等操作。

使用DOM 对XML 文件进行操作时,首先要解析文件,将文件分为独立的元素、属性和注释等,然后以节点树的形式在内存中对XML 文件进行表示,就可以通过节点树访问文档的内容,并根据需要修改文档——这就是DOM的工作原理。DOM 实现时首先为XML 文档的解析定义一组接口,解析器读入整个文档,然后构造一个驻留内存的树结构,这样代码就可以使用DOM接口来操作整个树结构。

(元素具有属性,文本节点具有文本数据)

节点 (XML 文档中的每一个成分都是一个节点)。

DOM 语法规定:

整个文档是一个节点文档。

每一个XML标签是一个元素节点。

包含在XML元素中的文本是文本节点。

每一个XML属性是一个属性节点。

实例:

解析过程:book.xml

<?xml version="1.0" encoding="UTF-8"?>

<books>

<book id="12">

<name>Think in java</name>

<price>85.5</price>

</book>

<book id="15" >

<name>Spring in Action</name>

<price>39.2</price>

</book>

</books>

创建一个Book 类,元素包括 (id, name , price)并实现set 与get 与tostring 方法。

创建业务类实现解析 DomService.java

public class DomService {

public DomService() {

}

public List <Book> getBoks ( InputStream inputStream) throws Exception{

List <Book> list =new ArrayList<>();

// 创建一个DOM解析的工厂

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

DocumentBuilder builder= factory.newDocumentBuilder();

Document document = builder.parse(inputStream);

// 获得文档的元素节点

Element element = document.getDocumentElement();//

// 解析该元素的节点

NodeList bookNodes =element.getElementsByTagName("book");

for (int i = 0 ; i<bookNodes.getLength();i++){

// 取出节点中的每一个元素

Element bookElement = (Element) bookNodes.item(i);

Book book = new 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;

}

public static void main(String[] args) {

String path = "http://localhost:8080/HelloServlet/book.xml";

InputStream inputStream = HttpUtils.getXML(path);

DomService domService = new DomService();

try {

List <Book > list=domService.getBoks(inputStream);

for (Book book :list ){

System.out.println(book.toString());

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

3:工具类从服务器获取数据xml文件

public class HttpUtils {

public HttpUtils() {

}

public static InputStream getXML(String path){

InputStream inputStream = null;

try {

URL url = new URL (path);

if (url!= null){

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

connection .setConnectTimeout(3000);

connection.setDoOutput(true);

connection.setRequestMethod("GET");

int code = connection.getResponseCode();

if (code==200){

inputStream =connection.getInputStream();

}

}

}catch (Exception e){

}

return inputStream;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: