要解析的文件內容如下:
<?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;
}
}