黑马程序员技术交流社区
标题:
xml
[打印本页]
作者:
duanhuilin
时间:
2012-10-24 14:40
标题:
xml
xml文档该如何使用流对象操作读写?
作者:
谭立文
时间:
2012-10-24 14:54
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 下感兴趣可以研究一下。
作者:
duanhuilin
时间:
2012-10-24 14:56
领教了,谢谢!!
作者:
范贞亮
时间:
2012-10-24 15:22
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>
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2