100%
阅读:1208回复:0
java 私塾课堂笔记——XML
java 私塾课堂笔记——XML
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>[email protected]</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>[email protected]</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>[email protected]</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>[email protected]</EMAIL> </PERSON> </PEOPLE>输出结果: Root is PEOPLE Tony Blair 10 Downing Street, London, UK (061) 98765 (061) 98765 [email protected] Bill Clinton White House, USA (001) 6400 98765 (001) 6400 98765 [email protected] Tom Cruise 57 Jumbo Street, New York, USA (001) 4500 67859 (001) 4500 67859 [email protected] Linda Goodman 78 Crax Lane, London, UK (061) 54 56789 (061) 54 56789 [email protected] ---------------- End! ------------------- 下载java 私塾完整笔记:www.javass.cn |
|