java解析xml之DOM解析

来源:互联网 发布:windows帮助与支持 编辑:程序博客网 时间:2024/06/05 17:07

DOMDocument 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;

}

}

 

0 0
原创粉丝点击