zoukankan      html  css  js  c++  java
  • DOM方式解析xml实例2

    老样子,javabean实体类: 

    import java.io.*;
    public class Book implements Serializable {   
        private int id;   
        private String name;   
        private double price;  
        
        public Book(){}
        public Book(int id,String name,double price){
          this.id=id;
          this.name=name;
          this.price=price;
        }
        public void setId(int id){
           this.id=id;
        }
        public void setName(String name){
          this.name=name;
        }
        public void setPrice(double price){
          this.price=price;
        }
    }
    



    主要看这里: 

    public class DomParseService {
    public List<Book> getBooks(InputStream inputStream)
    	throws ParserConfigurationException, SAXException, IOException {
    	List<Book> bookList = new ArrayList<Book>();
    	DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    	DocumentBuilder builder = factory.newDocumentBuilder();
    	Document document = builder.parse(inputStream);
    	Element documentElement = document.getDocumentElement();
    	System.out.println("<?xml version="1.0" encoding="UTF-8"?>");
    	// 递归解析xml并进行原样输出
    	parseAll(documentElement);
    	System.out.println("
    ");
    	// System.out.println(documentElement.getChildNodes().getLength());
    	NodeList bookNodeList = document.getElementsByTagName("book");
    	for (int i = 0; i < bookNodeList.getLength(); i++) {
    		Element element = (Element) bookNodeList.item(i);
    		// System.out.println(element.getChildNodes().getLength());
    		// System.out.println(node.getNodeType()+":"+node.getNodeName()+":"+node.getNodeValue());
    		Book book = new Book();
    		book.setId(Integer.valueOf(element.getAttribute("id")));
    		NodeList bookChildNodes = element.getChildNodes();
    		for (int j = 0; j < bookChildNodes.getLength(); j++) {
            	Node node = bookChildNodes.item(j);
    			if (node.getNodeType() == Node.ELEMENT_NODE) {
    		      Element bookChildNode = (Element) node;
    		if ("name".equals(bookChildNode.getNodeName())) {
    			book.setName(bookChildNode.getFirstChild()
    				.getNodeValue());
    		} else if ("price".equals(bookChildNode.getNodeName())) {
    				book.setPrice(Double.valueOf(bookChildNode
    					.getFirstChild().getNodeValue()));
    		}
    	}
     }
    	bookList.add(book);
    }
    	// NodeList nodeList=documentElement.getChildNodes();
    	// for(int j=0;j<nodeList.getLength();j++){
    	// Node node=nodeList.item(j);
    	// System.out.println(node.getNodeType()+":"+node.getNodeName()+":"+node.getNodeValue());
    	// }
    	return bookList;
    }
    
    public void parseAll(Element element) {
    	String tagName = element.getNodeName();
    	System.out.print("<" + tagName);
    	NamedNodeMap attrMap = element.getAttributes();
    	if (attrMap != null && attrMap.getLength() > 0) {
    		for (int i = 0; i < attrMap.getLength(); i++) {
    			Attr attr = (Attr) attrMap.item(i);
    			String attrName = attr.getNodeName();
    			String attrValue = attr.getNodeValue();
    			System.out.print(" " + attrName + "="" + attrValue + """);
    		}
    	}
    	System.out.print(">");
    	NodeList childNodeList = element.getChildNodes();
    	if (childNodeList != null && childNodeList.getLength() > 0) {
    		for (int j = 0; j < childNodeList.getLength(); j++) {
    			Node childNode = childNodeList.item(j);
    			if (childNode.getNodeType() == Node.ELEMENT_NODE) {
    				// 递归解析xml
    				parseAll((Element) childNode);
    			} else if (childNode.getNodeType() == Node.COMMENT_NODE) {
    				System.out.print("<!--" + childNode.getNodeValue() + "-->");
    			} else if (childNode.getNodeType() == Node.TEXT_NODE) {
    				System.out.print(childNode.getNodeValue());
    			}
    		}
    	}
    	System.out.print("</" + tagName + ">");
    	}
    }
                              

    JUnit测试: 

    @Test
    	public void test() throws ParserConfigurationException, SAXException, IOException {
    		InputStream inputStream=this.getClass().getClassLoader().getResourceAsStream("xml.xml");
    		DomParseService dps=new DomParseService();
    		List<Book> bookList=dps.getBooks(inputStream);
    		for(Book book:bookList){
    			System.out.println(book);
    		}
    	}
                              

    结果输出如下: 

    <?xml version="1.0" encoding="UTF-8"?>
    <books>
    	<book id="12">
    		<name>thinking in java</name>
    		<price>85.5</price>
    	</book>
    	<book id="15">
    		<name>Spring in Action</name>
    		<price>39.0</price>
    	</book>
    </books>
    12:thinking in java:85.5
    15:Spring in Action:39.0
                             
  • 相关阅读:
    racle wm_concat(column)函数的使用
    位运算应用口诀和实例
    关于Oracle中查询的数字值的显示格式需要保留小数点后两位(或者三位,及其他位数)
    SQL触发器实例讲解
    编写更好的jQuery代码的建议
    Jquery插件开发学习
    Java中super的几种用法并与this的区别
    全面总结Java泛型
    Oracle统计函数之Lead
    VBscript读取excel表,中数据导入到SQLserver数据库里面
  • 原文地址:https://www.cnblogs.com/meimao5211/p/3209385.html
Copyright © 2011-2022 走看看