主题:java 课堂笔记——XML
以下是我在青鸟学习的jave--xml课堂笔记,与大家分享一下!!
详情请登录:linda@everywhere.com[url] http://www.gobenet.net.cn[/url]
a: 两种形式 dtd schema,
b: 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的根本目的),
c:有DOM,SAX,STAX等.
DOM:处理大型文件时其性能下降的非常厉害.这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问
SAX:不现于DOM,SAX是事件驱动型的XML解析方式.它顺序读取XML文件,不需要一次全部装载整个文件.当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问
STAX:Streaming API for XML (StAX)
DOM解析
import org.w3c.dom.*;
import javax.xml.parsers.*;
/** 以DOM结构读取XML文件到内存中,并显示到屏幕上
*/
public class DomDocument1{
public static void main(String[] args) throws Exception{
int i=0;
//创建一个DocumentBuilderFactory的对象
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
//再创建一个DocumentBuilder的对象builder
DocumentBuilder builder=factory.newDocumentBuilder();
//以xml文件为参数来调用builder对象的parse方法,将XML文档内容转换为内存中的DOM 对象结构,
//存放在document对象中
Document document=builder.parse("candidate.xml");
//得到所有元素节点(都是元素节点,不包括文本节点和属性节点) //见listinfo.txt, getNodeType=1 (ELEMENT_NODE)
NodeList list=document.getElementsByTagName("*");
//得到根节点的方便方法
System.out.println("Root is "+document.getDocumentElement().getTagName());
//遍历各个节点,得到节点为文本节点的内容
while(i<list.getLength()){
Node thisNode=list.item(i);
Node thisChild=thisNode.getFirstChild();
if(thisChild.getNodeType() == Node.TEXT_NODE){
System.out.println(thisChild.getNodeValue());
}
i++;
}
System.out.println("---------------- End! -------------------");
}
}
<?xml version="1.0"?>
<PEOPLE>
<PERSON PERSONID="E01">
<NAME>Tony Blair</NAME>
<yuy>10 Downing Street, London, UK</yuy>
<TEL>(061) 98765</TEL><FAX>(061) 98765</FAX>
<EMAIL>blair@everywhere.com</EMAIL>
</PERSON>
<PERSONa PERSONID="E02">
<NAME>Bill Clinton</NAME>
<ADDRESS>White House, USA</ADDRESS>
<TEL>(001) 6400 98765</TEL><FAX>(001) 6400 98765</FAX>
<EMAIL>bill@everywhere.com</EMAIL>
</PERSONa>
<PERSON PERSONID="E03">
<NAME>Tom Cruise</NAME>
<ADDRESS>57 Jumbo Street, New York, USA</ADDRESS>
<TEL>(001) 4500 67859</TEL><FAX>(001) 4500 67859</FAX>
<EMAIL>cruise@everywhere.com</EMAIL>
</PERSON>
<PERSON PERSONID="E04">
<NAME>Linda Goodman</NAME>
<ADDRESS>78 Crax Lane, London, UK</ADDRESS>
<TEL>(061) 54 56789</TEL><FAX>(061) 54 56789</FAX>
<EMAIL>linda@everywhere.com</EMAIL>
</PERSON>
</PEOPLE>
输出结果:
Root is PEOPLE
Tony Blair
10 Downing Street, London, UK
(061) 98765
(061) 98765
blair@everywhere.com
Bill Clinton
White House, USA
(001) 6400 98765
(001) 6400 98765
bill@everywhere.com
Tom Cruise
57 Jumbo Street, New York, USA
(001) 4500 67859
(001) 4500 67859
cruise@everywhere.com
Linda Goodman
78 Crax Lane, London, UK
(061) 54 56789
(061) 54 56789
详情请登录:linda@everywhere.com[url] http://www.gobenet.net.cn[/url]
a: 两种形式 dtd schema,
b: 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的根本目的),
c:有DOM,SAX,STAX等.
DOM:处理大型文件时其性能下降的非常厉害.这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问
SAX:不现于DOM,SAX是事件驱动型的XML解析方式.它顺序读取XML文件,不需要一次全部装载整个文件.当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问
STAX:Streaming API for XML (StAX)
DOM解析
import org.w3c.dom.*;
import javax.xml.parsers.*;
/** 以DOM结构读取XML文件到内存中,并显示到屏幕上
*/
public class DomDocument1{
public static void main(String[] args) throws Exception{
int i=0;
//创建一个DocumentBuilderFactory的对象
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
//再创建一个DocumentBuilder的对象builder
DocumentBuilder builder=factory.newDocumentBuilder();
//以xml文件为参数来调用builder对象的parse方法,将XML文档内容转换为内存中的DOM 对象结构,
//存放在document对象中
Document document=builder.parse("candidate.xml");
//得到所有元素节点(都是元素节点,不包括文本节点和属性节点) //见listinfo.txt, getNodeType=1 (ELEMENT_NODE)
NodeList list=document.getElementsByTagName("*");
//得到根节点的方便方法
System.out.println("Root is "+document.getDocumentElement().getTagName());
//遍历各个节点,得到节点为文本节点的内容
while(i<list.getLength()){
Node thisNode=list.item(i);
Node thisChild=thisNode.getFirstChild();
if(thisChild.getNodeType() == Node.TEXT_NODE){
System.out.println(thisChild.getNodeValue());
}
i++;
}
System.out.println("---------------- End! -------------------");
}
}
<?xml version="1.0"?>
<PEOPLE>
<PERSON PERSONID="E01">
<NAME>Tony Blair</NAME>
<yuy>10 Downing Street, London, UK</yuy>
<TEL>(061) 98765</TEL><FAX>(061) 98765</FAX>
<EMAIL>blair@everywhere.com</EMAIL>
</PERSON>
<PERSONa PERSONID="E02">
<NAME>Bill Clinton</NAME>
<ADDRESS>White House, USA</ADDRESS>
<TEL>(001) 6400 98765</TEL><FAX>(001) 6400 98765</FAX>
<EMAIL>bill@everywhere.com</EMAIL>
</PERSONa>
<PERSON PERSONID="E03">
<NAME>Tom Cruise</NAME>
<ADDRESS>57 Jumbo Street, New York, USA</ADDRESS>
<TEL>(001) 4500 67859</TEL><FAX>(001) 4500 67859</FAX>
<EMAIL>cruise@everywhere.com</EMAIL>
</PERSON>
<PERSON PERSONID="E04">
<NAME>Linda Goodman</NAME>
<ADDRESS>78 Crax Lane, London, UK</ADDRESS>
<TEL>(061) 54 56789</TEL><FAX>(061) 54 56789</FAX>
<EMAIL>linda@everywhere.com</EMAIL>
</PERSON>
</PEOPLE>
输出结果:
Root is PEOPLE
Tony Blair
10 Downing Street, London, UK
(061) 98765
(061) 98765
blair@everywhere.com
Bill Clinton
White House, USA
(001) 6400 98765
(001) 6400 98765
bill@everywhere.com
Tom Cruise
57 Jumbo Street, New York, USA
(001) 4500 67859
(001) 4500 67859
cruise@everywhere.com
Linda Goodman
78 Crax Lane, London, UK
(061) 54 56789
(061) 54 56789