一个符合xml规范的document
<hotels>
<hotel id="B01">
<name>酒店一</name>
<place>南京</place>
<time>1</time>
<price>100</price>
</hotel><hotel id="B02">
<name>酒店二</name>
<place>苏州</place>
<time>1</time>
<price>110</price>
</hotel>
</hotels>如果想取出name为酒店二的内容,怎么实现? 

解决方案 »

  1.   

    package com.xml;import java.io.File;
    import java.io.InputStream;   
    import java.util.ArrayList;   
    import java.util.List;   
      
    import javax.xml.parsers.DocumentBuilder;   
    import javax.xml.parsers.DocumentBuilderFactory;   
      
    import org.w3c.dom.Document;   
    import org.w3c.dom.Element;   
    import org.w3c.dom.NodeList;   
    import org.w3c.dom.Node;   
      
      
    public class DomParseService {   
        public List<Hotel> getHotel(File inputStream) throws Exception{   
            List<Hotel> list = new ArrayList<Hotel>();   
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();   
            DocumentBuilder builder = factory.newDocumentBuilder();   
            //Document document = builder.parse(inputStream);   
            Document document = builder.parse(inputStream);   
            Element element = document.getDocumentElement();   
               
            NodeList HotelNodes = element.getElementsByTagName("hotel");   
            for(int i=0;i<HotelNodes.getLength();i++){   
                Element HotelElement = (Element) HotelNodes.item(i);   
                Hotel Hotel = new Hotel();   
                Hotel.setId(HotelElement.getAttribute("id"));   
                NodeList childNodes = HotelElement.getChildNodes();   
    //          System.out.println("*****"+childNodes.getLength());   
                for(int j=0;j<childNodes.getLength();j++){   
                    if(childNodes.item(j).getNodeType()==Node.ELEMENT_NODE){   
                        if("name".equals(childNodes.item(j).getNodeName())){   
                            Hotel.setName(childNodes.item(j).getFirstChild().getNodeValue());   
                        }else if("place".equals(childNodes.item(j).getNodeName())){   
                           // Hotel.setPrice(Float.parseFloat(childNodes.item(j).getFirstChild().getNodeValue()));  
                            Hotel.setPlace(childNodes.item(j).getFirstChild().getNodeValue()); 
                        } else if("time".equals(childNodes.item(j).getNodeName())){       
                             Hotel.setTime(Integer.parseInt(childNodes.item(j).getFirstChild().getNodeValue())); 
                         }else if("price".equals(childNodes.item(j).getNodeName())){       
                             Hotel.setPrice(Integer.parseInt(childNodes.item(j).getFirstChild().getNodeValue())); 
                         }    
                    }   
                }//end for j   
                list.add(Hotel);   
            }//end for i   
            return list;   
        }
        
        public static void main (String args[]) throws Exception
        {
          //  InputStream input = getClass().getClassLoader().getResourceAsStream("hotels.xml");   
            File input = new File("d:\\hotels.xml");   
               DomParseService dom = new DomParseService();   
               List<Hotel> hotels = dom.getHotel(input);   
               for(Hotel hotel : hotels){  
                if(hotel.getName().equals("酒店二"))
                {
                System.out.println("取出name为酒店二的内容如下:");   
                System.out.println("id="+hotel.getId());   
                System.out.println(hotel.getName());   
                System.out.println(hotel.getPlace());   
                System.out.println(hotel.getTime());   
                }
                   
               }
        }
    }  Hotel.java用来组装数据和盛放数据
    package com.xml;
    /*
     <hotel id="B02">
    <name>酒店二</name>
    <place>苏州</place>
    <time>1</time>
    <price>110</price>
     </hotel> */
    public class Hotel {
    private String id;//存放hotel的id属性
    private String name;
    private String place;
    int time;
    int price;
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getPlace() {
    return place;
    }
    public void setPlace(String place) {
    this.place = place;
    }
    public int getTime() {
    return time;
    }
    public void setTime(int time) {
    this.time = time;
    }
    public int getPrice() {
    return price;
    }
    public void setPrice(int price) {
    this.price = price;
    }
    public String getId() {
    return id;
    }
    public void setId(String id) {
    this.id = id;
    }

    }
     
    D盘目录下一个hotels.xml
    内容如下:
    <?xml version="1.0" encoding="GB2312"?>
    <hotels>
    <hotel id="B01">
    <name>酒店一</name>
    <place>南京</place>
    <time>1</time>
    <price>100</price>
    </hotel><hotel id="B02">
    <name>酒店二</name>
    <place>苏州</place>
    <time>1</time>
    <price>110</price>
    </hotel>
    </hotels>