学习XML的笔记Day1

来源:互联网 发布:求剑若此 不亦惑乎 编辑:程序博客网 时间:2024/05/16 18:49
在做完题时,要注意一些细节
重点在两种解析dom,sax,dom4j
dom的建立
DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder=builderFactory.newDocumentBuilder();


DocumentBuilderFactory  builderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder=builderFactory.newDocumentBuilder();
Document dom=docBuilder.parse(new File("bin...."))
//这个方法将遍历当前节点的所有子孙节点,通过删除空的 Text 节点,
//已经合并所有相邻的 Text 节点来规范化文档。该方法在进行节点的插
//入或删除操作后,对于简化文档树的结构很有用。
dom.getDocumentElement().normalize();




在dom中常用的是
NodeList nodes=dom.getElementByTagName("camyany")
for(;nodes.getLength();)


dom的优点:
只需要解析一次,dom就可以随时用,可以实现CRUD对数据操作。
dom缺点:
dom由于一次性将树加载到内存中,这样就比较消耗资源,占用内存。
速度慢










sax的建立
SaxParseFactory factory=SaxParseFactory.newInstance();
SaxParse saxParse=factory.newSaxParse();
XMLReader xmlReader=saxParse.getXMLReader();
xmlReader.setContentHandler(new MyContentHandler);
xmlReader.parse("book.xml");


sax的优点:
速度快,它是触发式的,当我们用它去解析book.xml,只要读取一行,就会调用接口里面实现的方法
所以我们实现了一个接口 MyContentHandler implementations  ContentHandler,但是这样之间用接口的方法,要实现 ContentHandler
接口中所有的方法,我们可以用一个更好一点的DefaultHandler,这是一个实类,我们只要继承它就可以,我们想实现一些什么方法,我
们就写些什么。


sax缺点:


只能对文档进行读操作。


dom4j的建立
SaxReader  saxReader=new SaxReader();
Document dom=saxReader.read("bin/...");
Element element=dom.getRootElement();


dom4j是用来读取XML的利器,他中间有许多好的方法,同时我们增删查完文档,我们还可以重写入文档。
  FileWriter fw=new FileWriter("bin/Dom4JDemoDay1/sg.xml");
dom.write(fw);
fw.flush();
fw.close();

自己在使用中出的错:
当我写文件时,我没有注意myeclipes的自动刷新功能,写入了文件,当去查看的时候有查不到,弄了半天,发现最后文件是已经被改了的


1.复习笔记,回想xml的语法,照着语法要求写一个尽量复杂的xml
2.复习dtd语法,照着ppt上的dtd,写一个对应的xml出来
!!!3.复习两种xml的解析思想,复习一下老师课堂上敲的sax解析,重点练习使用dom4j进行增删改查操作
4.掌握名称空间的概念,很重要.明白如何在xml中引入一个dtd,打开schema文档照着其中的schema试着去写符合约束的xml


1,在做第一题时,我发现我忽视的很多问题,<![CDATA[]]>只能放在根元素下
2,
   <!ELEMENT campanys (campany+)>
   <!ELEMENT campany (cname,products,address,phone,cofounder,weiboid,outlookofval)>
   <!ELEMENT cname (#PCDATA)>
   写dtd时注意cname与(#PCDATA)有空格,不然会发生错误
3,产品products中嵌套一个product+有错
campany (cname,products(product+),address,phone,cofounder,weiboid,outlookofval)


练习对应的是DayOne
0 0