DOM方式xml解析

原创 2018年04月16日 15:39:42
package com.example.alexanderlee.newspaper.parser;

import android.os.AsyncTask;
import android.util.Log;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import static com.example.alexanderlee.newspaper.view.MainActivity.TAG;

/**
 * Created by alexanderlee on 2018/4/16.
 */

public class XmlParser {

    public static final String xmlUrl = "http://oxm0wpojp.bkt.clouddn.com/newspaper.xml";

    public ArrayList<HashMap<String, String>> newsList = new ArrayList<HashMap<String, String>>();

    public static final String KEY_TITLE = "title";
    public static final String KEY_CONTENT = "content";
    public static final String KEY_IMAGEURL = "imageUrl";

    public XmlParser(ArrayList<HashMap<String, String>> newsList) {
        this.newsList = newsList;
        new XmlPaserAsyncTask().execute();
    }

    class XmlPaserAsyncTask extends AsyncTask {

        @Override
        protected Object doInBackground(Object[] objects) {
            try {
                URL url = new URL(xmlUrl);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("GET");
                Log.d(TAG, "hello");
                conn.setConnectTimeout(5000);
                Log.d(TAG, "conn.getResponseCode()" + conn.getResponseCode());
                if (conn.getResponseCode() == 200) {
                    Log.d(TAG, String.valueOf(conn.getResponseCode()));
                    InputStream is = conn.getInputStream();
                    Log.d(TAG, "is=" + is);
                    xmlPaser(is);
                }

            } catch (Exception e) {
                e.printStackTrace();
            } finally {

            }
            return null;
        }
    }

    private void xmlPaser(InputStream is) {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document document = db.parse(is);
            Element root = document.getDocumentElement();
            NodeList nodeList = root.getElementsByTagName("news");
            for (int i = 0; i < nodeList.getLength(); i++) {

                Element newsElement = (Element) nodeList.item(i);
                String id = newsElement.getAttribute("id");
                HashMap<String, String> map = new HashMap<>();

                Element titleElement = (Element) newsElement.getElementsByTagName(KEY_TITLE).item(0);
                String title = titleElement.getTextContent();
                map.put(KEY_TITLE, title);

                Element contentElement = (Element) newsElement.getElementsByTagName(KEY_CONTENT).item(0);
                String content = contentElement.getTextContent();
                map.put(KEY_CONTENT, content);

                Element imageUrlElement = (Element) newsElement.getElementsByTagName(KEY_IMAGEURL).item(0);
                String imageUrl = imageUrlElement.getTextContent();
                map.put(KEY_IMAGEURL, imageUrl);

                newsList.add(map);
            }

        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Java 应用DOM方式解析XML文件

引入java为啥需要解析XML的方法?xml的优势:它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或...
  • qq_23473123
  • qq_23473123
  • 2016-05-15 13:53:25
  • 2747

通过Dom方式解析xml文件

此项目通过简单的天气情况显示来实现xml文件的解析 1. 搭建环境 1)创建如下图的包、类及文件 2)布局文件的大概样式如下图所示,用到四个TextView控件和一个RadioButton控件 ...
  • lyy1104
  • lyy1104
  • 2014-06-04 19:15:49
  • 4386

XML解析的两种解析方式:DOM和SAX

DOM:(Document Object Model,即文档对象模型),是W3C组织推荐的解析XML的一种方式 SAX:(Simple API for XML)不是官方标准,但他是XML社区事实上的...
  • u012110719
  • u012110719
  • 2015-05-12 16:07:17
  • 1416

XML解析的两种方式:DOM方式和SAX方式

DOM:Document ObjectModel,文档对象模型。这种方式是W3C推荐的处理XML的一种方式。 SAX:Simple API for XML。这种方式不是官方标准,属于开源社区XML-D...
  • u012526194
  • u012526194
  • 2015-09-26 14:17:20
  • 3961

xml文件的解析解析方式及Dom解析与Sax解析的区别

一、简单概述你常见的xml解析方式 ①DOM
  • Crazy9599
  • Crazy9599
  • 2014-06-03 19:20:14
  • 1249

xml之DOM方式解析,DOM4J工具解析原理

DOM解析原理: DOM解析原理:xml解析器一次性把整个xml文档加载进内存,然后在内存中构建一颗Document的对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到x...
  • qq_32059827
  • qq_32059827
  • 2016-05-26 16:18:22
  • 2409

sax和dom在解析xml文档时有什么区别

当你需要处理XML文档时,你的首要选择是使用DOM(文档对象模型)还是使用SAX(用于XML的简单API),即当前使用的两个主要的XML API。你可以使用任何一种(或者在同一时间使用两种)来处理XM...
  • zhupengqq
  • zhupengqq
  • 2016-04-18 18:31:22
  • 1549

Android中三种常用解析XML的方式(DOM、SAX、PULL)简介及区别

XML在各种开发中都广泛应用,Android也不例外。作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能。今天就由我向大家介绍一下在Android平台下几种常见的XML解...
  • cangchen
  • cangchen
  • 2015-03-03 10:17:34
  • 3970

利用Dom,Sax,Pull三种方式解析xml文件

最近找工作,看到许多公司的要求里都写了要会xml解析,所以就把之前的xml解析知识又重新回顾了一下,写个小例子. 解析xml文件常用的几种方式也就dom,sax,pull了,并且面试官经常问到的也是这...
  • qiang_xi
  • qiang_xi
  • 2015-11-29 20:15:55
  • 1444
收藏助手
不良信息举报
您举报文章:DOM方式xml解析
举报原因:
原因补充:

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