Android XML解析技术——DOM

来源:互联网 发布:手机扫描录入软件 编辑:程序博客网 时间:2024/06/05 17:01

1、Book类

public class Book {private int id;private String name;private float price;public Book() {// TODO 自动生成的构造函数存根}public Book(int id, String name, float price) {super();this.id = id;this.name = name;this.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;}@Overridepublic String toString() {return "Book [id=" + id + ", name=" + name + ", price=" + price+ "]";}}
2、HttpUtil类

public class httpUtils {public httpUtils() {// TODO 自动生成的构造函数存根}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.setDoInput(true);connection.setRequestMethod("GET");int code = connection.getResponseCode();if(code == 200){inputStream = connection.getInputStream();}}} catch (Exception e) {// TODO: handle exception}return inputStream;}}

3、解析实体类
public class DomService {public DomService() {// TODO 自动生成的构造函数存根}public List<Book> getBooks(InputStream inputStream) throws ParserConfigurationException, SAXException, IOException{List<Book> list = new ArrayList<Book>();//创建一个document解析的工厂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[]) throws ParserConfigurationException, SAXException, IOException{String path = "http://192.168.0.102:8080/MyHttp/book.xml";InputStream inputStream = httpUtils.getXML(path);DomService service = new DomService();List<Book> list = service.getBooks(inputStream);for(Book book:list){System.out.println(book.toString());}}}/*输出结果: * [id = 12, name = thinking in java, price = 85.5] * [id = 15, name = Spring in Action, price = 39.0] *  * DOM解析XML文件相比其他两种解析方式,效率低下, * 如果当前如果有很多个子节点,再取一次字节点,所以效率比较低,所以一般使用的时候比较少 * *//*=========SAX、DOM和PULL的比较 * 从内存占用率来说:SAX和PULL比DOM占用更少的内存解析方式,更加适合Android 开发 *  *  * */

0 0
原创粉丝点击