XML 의 첨삭 검사

10606 단어 JavaWebXML
{Dom4j xml 문서 수정}
xml 문서 로 내용 쓰기
        Document doc = new SAXReader().read(new File("./src/contact.xml"));
        //         
        FileOutputStream out = new FileOutputStream("c:/io/contact.xml");
        /**
         * 1.       
         */
//      OutputFormat format = OutputFormat.createCompactFormat(); //     .      .       
        OutputFormat format = OutputFormat.createPrettyPrint(); //     .      .       
        /**
         * 2.     xml     
         *         xml             xml     encoding   (xml      )
         *      :         xml          。
         */
        format.setEncoding("utf-8");
        //1.      
        XMLWriter writer = new XMLWriter(out,format);
        //2.    
        writer.write(doc);
        //3.   
        writer.close();

xml 내용 수정
  • 증가:
  • DocumentHelper.createDocument()      
    addElement("  ")      
    addAttribute("  ",“ ”)      
    
  • 사례:
    /**
     * 1.    
     */
    Document doc = DocumentHelper.createDocument();
    /**
     * 2.    
     */
    Element rootElem = doc.addElement("contactList");
    //doc.addElement("contactList");
    Element contactElem = rootElem.addElement("contact");
    contactElem.addElement("name");
    /**
     * 3.    
     */
    contactElem.addAttribute("id", "001");
    contactElem.addAttribute("name", "eric");   
    //     Document     xml   
    FileOutputStream out = new FileOutputStream("e:/contact.xml");
    OutputFormat format = OutputFormat.createPrettyPrint();
    format.setEncoding("utf-8");
    XMLWriter writer = new XMLWriter(out,format);
    writer.write(doc);
    writer.close();
    
  • 수정
  • Attribute.setValue(" ")       
    Element.addAtribute("      "," ")          
    Element.setText("  ")        
    
  • 사례
    Document doc = new SAXReader().read(new File("./src/contact.xml"));
    /**
     *    :         1.       2.       3.     
     */
    //1.1        
    /*
    Element contactElem = doc.getRootElement().element("contact");
    //1.2       
    Attribute idAttr = contactElem.attribute("id");
    //1.3      
    idAttr.setValue("003");
    */
    /**
     *    :      
     */
    //1.1        
    /*
    Element contactElem = doc.getRootElement().element("contact");
    //1.2            ,     
    contactElem.addAttribute("id", "004");
    */
    /**
     *      1.       2.    
     */
    Element nameElem = doc.getRootElement().
        element("contact").element("name");
    nameElem.setText("  ");
    
    
    
    FileOutputStream out = new FileOutputStream("e:/contact.xml");
    OutputFormat format = OutputFormat.createPrettyPrint();
    format.setEncoding("utf-8");
    XMLWriter writer = new XMLWriter(out,format);
    writer.write(doc);
    writer.close();
    
  • 삭제
  • Element.detach();        
    Attribute.detach();      
    
  • 사례
    Document doc = new SAXReader().read(new File("./src/contact.xml"));
    
    /**
     * 1.         1.1         1.2           
     */
    // 1.1       
    /*
    Element ageElem = doc.getRootElement().element("contact")
                .element("age");
    
    //1.2       
    ageElem.detach();
    //ageElem.getParent().remove(ageElem);
    */
    /**
     * 2.       2.1        2.2     
     */
    //2.1      
    //     contact  
    Element contactElem = (Element)doc.getRootElement().
        elements().get(1);
    //2.2       
    Attribute idAttr = contactElem.attribute("id");
    //2.3     
    idAttr.detach();
    //idAttr.getParent().remove(idAttr);
    
    FileOutputStream out = new FileOutputStream("e:/contact.xml");
    OutputFormat format = OutputFormat.createPrettyPrint();
    format.setEncoding("utf-8");
    XMLWriter writer = new XMLWriter(out,format);
    writer.write(doc);
    writer.close();
    

  • {작은 연습}
  • 1. dom4j api 를 사용 하여 다음 xml 파일 생 성
  • 
        
              
             
               1 
            
    2
  • 2. id 가 2 인 학생 의 이름 을 바 꾸 고 '왕 리'
  • 로 바 꿉 니 다.
  • 3. id 가 2 인 학생 삭제
  • *
    {SAX 해석}
    DOM    :    xml       ,        Document 。        。  
          :          xml  ,        。
    
    SAX    :     ,    ,    。        。
    

    DOM 과 SAX 비교
  • DOM 해석
  • 원리: xml 문 서 를 한 번 에 불 러 옵 니 다. 대 용량 의 파일 읽 기 DOM 해석 에 적합 하지 않 습 니 다. DOM 해석 으로 임의의 위치 데 이 터 를 읽 을 수 있 고 DOM 해석 대상 을 대상 으로 하 는 프로 그래 밍 방법 (Node, Element, Attribute) 을 다시 읽 을 수 있 습 니 다. 자바 개발 자 인 코딩 은 간단 합 니 다.
  • SAX 해석
  • 원리: 한 점 을 불 러 오고 한 점 을 읽 고 처리 합 니 다.대 용량 파일 읽 기 에 적합 한 SAX 해석 은 SAX 해석 만 읽 을 수 있 고 위 에서 아래로 만 읽 을 수 있 으 며 순서대로 읽 을 수 있 으 며 SAX 해석 은 이벤트 기반 프로 그래 밍 방법 을 다시 읽 을 수 없습니다.자바 개발 코드 가 상대 적 으로 복잡 합 니 다.

  • 첫 번 째 SAX xml 파일 읽 기 프로그램
    케이스
    public static void main(String[] args) throws Exception{
        //1.  SAXParser  
        SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
    
        //2.  parse  
        /**
         *    : xml  
         *    : DefaultHandler   
         */
        parser.parse(new File("./src/contact.xml"), new MyDefaultHandler());
    }
    
    /**
     * SAX    (    xml  )
     * @author APPle
     *
     */
    public class MyDefaultHandler extends DefaultHandler {
    
        /**
         *        
         */
        @Override
        public void startDocument() throws SAXException {
            System.out.println("MyDefaultHandler.startDocument()");
        }
    
        /**
         *        
         * @param qName:           
         * @param attributes:               
         */
        @Override
        public void startElement(String uri, String localName, String qName,
                Attributes attributes) throws SAXException {
            System.out.println("MyDefaultHandler.startElement()-->"+qName);
        }
    
        /**
         *        
         * @param qName:          
         */
        @Override
        public void endElement(String uri, String localName, String qName)
                throws SAXException {
            System.out.println("MyDefaultHandler.endElement()-->"+qName);
        }
    
        /**
         *           
         * @param ch:              
         * @param start:              
         * @param length:            
         * char[](                                                       20)   100
         *                              98 2   
         */ 
        @Override
        public void characters(char[] ch, int start, int length)
                throws SAXException {
            //        
            String content = new String(ch,start,length);
            System.out.println("MyDefaultHandler.characters()-->"+content);
        }
    
        /**
         *        
         */
        @Override
        public void endDocument() throws SAXException {
            System.out.println("MyDefaultHandler.endDocument()");
        }
    
    }
    

    contact. xml 파일 읽 기, 전체 출력 문서 내용
    케이스
    public static void main(String[] args)throws Exception {
        //1.  SAXParser
        SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
        //2.  xml  
        MyDefaultHandler2 handler = new MyDefaultHandler2();
        parser.parse(new File("./src/contact.xml"), handler);
        String content = handler.getContent();
        System.out.println(content);
    }
    
    /**
     * SAX     
     * @author APPle
     */
    public class MyDefaultHandler2 extends DefaultHandler {
        //  xml    
        private StringBuffer sb = new StringBuffer();
    
        //  xml  
        public String getContent(){
            return sb.toString();
        }
    
    
        /**
         *     
         */
        @Override
        public void startElement(String uri, String localName, String qName,
                Attributes attributes) throws SAXException {
            sb.append("");
        }
    
        /**
         *     
         */
        @Override
        public void characters(char[] ch, int start, int length)
                throws SAXException {
            //         
            String content = new String(ch,start,length);
            sb.append(content);
        }
    
        /**
         *     
         */
        @Override
        public void endElement(String uri, String localName, String qName)
                throws SAXException {
            sb.append(""+qName+">");
        }
    }
    

    sax 분석 을 사용 하여 xml 문 서 를 대상 으로 밀봉 합 니 다.
    케이스
    public static void main(String[] args)throws Exception {
        SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
        MyDefaultHandler3 handler = new MyDefaultHandler3();
        parser.parse(new File("./src/contact.xml"), handler);
        List list = handler.getList();
        for (Contact contact : list) {
            System.out.println(contact);
        }
    }
    
    /**
     * SAX    
     * @author APPle
     *
     */
    public class MyDefaultHandler3 extends DefaultHandler {
        //         
        private List list = new ArrayList();
    
        public List getList(){
            return list;
        }
        //         
        private Contact contact;
        /**
         *   : 
         *  1)  Contact  
         *  2)   contact       Contact  
         *  3) Contact    List 
         */
        //              
        private String curTag;
    
        @Override
        public void startElement(String uri, String localName, String qName,
                Attributes attributes) throws SAXException {
            curTag = qName;
            //   contact       Contact  
            if("contact".equals(qName)){
                contact = new Contact();
    
                //  id 
                contact.setId(attributes.getValue("id"));
            }
        }
    
        @Override
        public void characters(char[] ch, int start, int length)
                throws SAXException {
            //      
            String content = new String(ch,start,length);
    
            if("name".equals(curTag)){
                contact.setName(content);
            }
    
            if("age".equals(curTag)){
                contact.setAge(content);
            }
    
            if("phone".equals(curTag)){
                contact.setPhone(content);
            }
    
            if("email".equals(curTag)){
                contact.setEmail(content);
            }
    
            if("qq".equals(curTag)){
                contact.setQq(content);
            }
        }
    
        @Override
        public void endElement(String uri, String localName, String qName)
                throws SAXException {
            //                     
            curTag = null;
            //  contact       List 
            if("contact".equals(qName)){
                list.add(contact);
            }
        }
    }
    

    좋은 웹페이지 즐겨찾기