找回密码
 快速注册

QQ登录

只需一步,快速开始

查看: 1692|回复: 1

java 私塾课堂笔记——XML

[复制链接]
solimh 发表于 2011-5-9 10:47:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?快速注册

×
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解析

  1. import org.w3c.dom.*;
  2. import javax.xml.parsers.*;
  3. /** 以DOM结构读取XML文件到内存中,并显示到屏幕上
  4. */
  5. public class DomDocument1{
  6.    public static void main(String[] args) throws Exception{
  7.       int i=0;

  8.       //创建一个DocumentBuilderFactory的对象
  9.       DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
  10.       //再创建一个DocumentBuilder的对象builder
  11.       DocumentBuilder builder=factory.newDocumentBuilder();
  12.       //以xml文件为参数来调用builder对象的parse方法,将XML文档内容转换为内存中的DOM     对象结构,
  13.       //存放在document对象中
  14.       Document document=builder.parse("candidate.xml");
  15.       //得到所有元素节点(都是元素节点,不包括文本节点和属性节点)    //见listinfo.txt,      getNodeType=1 (ELEMENT_NODE)
  16.       NodeList list=document.getElementsByTagName("*");   
  17.       //得到根节点的方便方法   
  18.       System.out.println("Root is "+document.getDocumentElement().getTagName());
  19.       //遍历各个节点,得到节点为文本节点的内容
  20.       while(i<list.getLength()){
  21.         Node thisNode=list.item(i);      
  22.         Node thisChild=thisNode.getFirstChild();  
  23.         if(thisChild.getNodeType() == Node.TEXT_NODE){         
  24.            System.out.println(thisChild.getNodeValue());
  25.         }
  26.         i++;            
  27.       }
  28.       System.out.println("---------------- End! -------------------");
  29.    }
  30. }
复制代码

  1. <?xml version="1.0"?>
  2. <PEOPLE>
  3.    <PERSON PERSONID="E01">
  4.       <NAME>Tony Blair</NAME>
  5.       <yuy>10 Downing Street, London, UK</yuy>
  6.       <TEL>(061) 98765</TEL><FAX>(061) 98765</FAX>
  7.       <EMAIL>blair@everywhere.com</EMAIL>
  8.    </PERSON>
  9.    <PERSONa PERSONID="E02">
  10.       <NAME>Bill Clinton</NAME>
  11.       <ADDRESS>White House, USA</ADDRESS>
  12.       <TEL>(001) 6400 98765</TEL><FAX>(001) 6400 98765</FAX>
  13.       <EMAIL>bill@everywhere.com</EMAIL>
  14.    </PERSONa>
  15.    <PERSON PERSONID="E03">
  16.       <NAME>Tom Cruise</NAME>
  17.       <ADDRESS>57 Jumbo Street, New York, USA</ADDRESS>
  18.       <TEL>(001) 4500 67859</TEL><FAX>(001) 4500 67859</FAX>
  19.       <EMAIL>cruise@everywhere.com</EMAIL>
  20.    </PERSON>
  21.    <PERSON PERSONID="E04">
  22.       <NAME>Linda Goodman</NAME>
  23.       <ADDRESS>78 Crax Lane, London, UK</ADDRESS>
  24.       <TEL>(061) 54 56789</TEL><FAX>(061) 54 56789</FAX>
  25.       <EMAIL>linda@everywhere.com</EMAIL>
  26.    </PERSON>
  27. </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
---------------- End! -------------------

下载java 私塾完整笔记:ww w.javass.cn
拉莫斯的小号 发表于 2011-5-9 22:26:10 | 显示全部楼层
xml用于数据存储,今天就用到了使用节点遍历取得消息容器的方法和配servlet。
我不认为这些厂商会发展dtd文档。xml也不会成为下一代主流标记语言。一般使用dom型解析对象的时候居多。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

快速回复 返回顶部 返回列表