A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

xml

© duanhuilin 中级黑马   /  2012-10-24 14:40  /  1155 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

xml文档该如何使用流对象操作读写?

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1

查看全部评分

3 个回复

倒序浏览
package com.wenfengkeji.utils;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class XmlUtils
{
        private static String xmlPath;
        static
        {
                xmlPath = XmlUtils.class.getClassLoader().getResource("users.xml").getPath();
                System.out.println(xmlPath);
        }
        public static Document getDocument() throws DocumentException
        {
                SAXReader reader = new SAXReader();
                return reader.read(new File(xmlPath));
        }
        public static void write2XML(Document document) throws IOException
        {
                OutputFormat format = OutputFormat.createPrettyPrint();
                format.setEncoding("UTF-8");
                XMLWriter writer = new XMLWriter(new FileOutputStream(xmlPath), format);
                writer.write(document);
                writer.close();
        }
}
这是用的第三方库来解析的,java也提供了对xml文件的操作,与之有关的包在
javax.xml.parsers 下感兴趣可以研究一下。

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1

查看全部评分

回复 使用道具 举报
领教了,谢谢!!
回复 使用道具 举报
SAX ,事件驱动。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少;
看如下实例:
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.Locator;
import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
import org.xml.sax.helpers.DefaultHandler;
import java.io.IOException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;


class TestSAX extends DefaultHandler{
   
    private StringBuffer buf;
    private String str;
    public TestSAX(){
        super();
    }
   
//    public void setDocumentLocator(Locator locator){}
   
    public void startDocument() throws SAXException{
        buf=new StringBuffer();
        System.out.println("*******开始解析文档*******");
    }
   
    public void endDocument() throws SAXException{        
        System.out.println("*******文档解析结束*******");
    }
   
    public void startPrefixMapping( String prefix, String uri ){
        System.out.println(" 前缀映射: " + prefix +" 开始!"+ " 它的URI是:" + uri);
    }
   
    public void endPrefixMapping( String prefix ){
        System.out.println(" 前缀映射: "+prefix+" 结束!");
    }
   
//    public void processingInstruction( String target, String instruction )throws SAXException{}
   
//    public void ignorableWhitespace( char[] chars, int start, int length ) throws SAXException {}
   
//    public void skippedEntity( String name ) throws SAXException {}
   
    public void startElement(String namespaceURI,String localName,String qName,Attributes atts){
        System.out.println("*******开始解析元素*******");   
        System.out.println("元素名"+qName);        
        for(int i=0;i<atts.getLength();i++){
            System.out.println("元素名"+atts.getLocalName(i)+"属性值"+atts.getValue(i));
        }
    }
   
    public void endElement(String namespaceURI,String localName,String fullName )throws SAXException{
//        buf.trimToSize();
        str = buf.toString();
        System.out.println("buf = "+buf+" || length = "+buf.length());
        System.out.println("str = "+str.trim()+" || length = "+str.trim().length());
        buf.delete(0,buf.length());
        System.out.println("******"+namespaceURI+"元素解析结束"+localName+"********"+fullName);
    }
   
    public void characters( char[] chars, int start, int length )throws SAXException{
        //将元素内容累加到StringBuffer中
        buf.append(chars,start,length);
    }
   
    public static void main(String args[]){
        try{
            SAXParserFactory sf = SAXParserFactory.newInstance();
            SAXParser sp = sf.newSAXParser();
            TestSAX testsax=new TestSAX();
            sp.parse(new InputSource("test1.xml"),testsax);
        }catch(IOException e){
            e.printStackTrace();
        }catch(SAXException e){
            e.printStackTrace();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
xml文件,我读的时候有错误,用了自己的,希望其他人比我幸运!
代码:
<?xml version="1.0" encoding="GB2312"?>
<row>
<person>
<name>王小明</name>
<college>信息学院</college>
<telephone>6258113</telephone>
<notes>男,1955年生,博士,95年调入海南大学</notes>
</person>
</row>

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马