DOM解折XML文件

要解析的文件內容如下:

<?xml version="1.0" encding="UTF-8"?>
<books>
	<book id="1">
		<name>世界之窗</name>
		<price>12</price>
	</book>
	<book id="2">
		<name>鬼吹燈</name>
		<price>43</price>
	</book>
</books>

Book.java

public class Book {
    private int id;
    private String name;
    private float price;
	public Book() {
		// TODO Auto-generated constructor stub
	}
	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;
	}
	@Override
	public String toString() {
		return "Book [id=" + id + ", name=" + name + ", price=" + price + "]";
	}
	

}

DomService.java

public class DomService {

	public DomService() {
		// TODO Auto-generated constructor stub
	}
	public List<Book> getBooks(InputStream inputStream) throws Exception{
		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 bookeElement = (Element)bookNodes.item(i);
			Book book = new Book();
			book.setId(Integer.parseInt(bookeElement.getAttribute("id")));
			NodeList choldNodes = bookeElement.getChildNodes();
			for(int j = 0 ;j<choldNodes.getLength();j++){
				System.out.println("choldNodes.item(j).getNodeType()="+choldNodes.item(j).getNodeType());
				System.out.println("Node.ELEMENT_NODE="+Node.ELEMENT_NODE);
				if(choldNodes.item(j).getNodeType() == Node.ELEMENT_NODE){
					if("name".equals(choldNodes.item(j).getNodeName())){
						book.setName(choldNodes.item(j).getFirstChild().getNodeValue());
					}else if("price".equals(choldNodes.item(j).getNodeName())){
						book.setPrice(Float.parseFloat(choldNodes.item(j).getFirstChild().getNodeValue()));
					}
				}
			}
			list.add(book);
		}
		return list;
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String path = "http://chinese-1c71864:8080/android_xml_dom/book.xml";
		InputStream inputStream = HttpUtils.getXML(path);
		DomService service = new DomService();
		try {
			List<Book> list = service.getBooks(inputStream);
			for(Book book:list){
				System.out.println(book.toString());
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

HttpUtils.java

public class HttpUtils {

	public HttpUtils() {
		// TODO Auto-generated constructor stub
	}
	public static InputStream getXML(String path){
		System.out.println("進到httpUtils");
		InputStream inputStream = null;
		try {
			URL url = new URL(path);
			System.out.println("url="+url.toString());
			if(url != null){
				HttpURLConnection connection = (HttpURLConnection) url.openConnection();
				connection.setConnectTimeout(3000);//延時時間3秒
				connection.setDoInput(true);// 設置是否從httpUrlConnection讀入,默認情況下是true; 
				connection.setRequestMethod("GET");
				int code = connection.getResponseCode();//驗證連接服務器是否成功,沒有密碼時,返回200爲成功,有密碼時返回401爲成功
				System.out.println("code="+code);
				if(code == 200){
					inputStream =  connection.getInputStream();
				}
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		return inputStream;
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章