XML编程,CURD,异常处理

来源:互联网 发布:成都纵横无人机 知乎 编辑:程序博客网 时间:2024/06/05 17:56
XML编程
增删改查CRUD
create read update delete

XML解析技术概述

dom sax

dom:(Document Object Model文档对象模型)W3C推荐
dom解析为对象树 节点都解析为对象
缺点:占用内存大
优点:对文档CURD容易
sax:(Simple API for XML)不是官方标准 但几乎所有XML解析器都支持
读一行解析一行
优点:占用内存小 解析速度快
缺点:只适合读取 不适合CURD
两者区别如上


调整JVM大小(应对dom内存溢出)

开辟空间
byte b[] = new byte[1024*1024];开辟1M空间
JVM默认最高能占内存64M,超出会拋异常
Run As--Run Configurations--Arguments--VM arguments中配置 -Xmx80m即扩展空间到80M

XML解析开发包

Jaxp(sun) Jdom dom4j(最优)

Jaxp是J2SE一部分

由javax.xml,org.w3c.dom,org.xml.sax包及其子包组成
在javax.xml.parsers包中,定义了几个工厂类
调用可得到xml文档的解析器,从而解析xml文档

javax.xml.parsers

DocumentBuilderFactory创建DOM模式的解析器对象

抽象工厂类 自带newInstance()方法来实例化

流程:1.创建工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
2.得到dom解析器
DocumentBuilder builder = factory.newsDocumentBuilder();
3.解析xml文档,得到代表文档的document
Document document = builder.parse("xxx");//xxx为xml文档地址
以上CURD之前都要执行 获得xml的对象树

CRUD:

read: getElementsByTagName("tagname");//由标签名找对象
.getTextContent();//对象的内容
递归循环读取所有标签
属性将node强转为element,用element.getAttribute("key")获取value

creat
: Element price = document.creatElement("xxx")//创建节点
  price.setTextContent("yyy")//添加内容
  Element book = document.getElementsByTagName("书").item(0);//找到第一本书
  book.appendChild(price);//添加子节点到第一本书中(这里添加到最后)
  [可以找参考节点实现往指定位置添加
  book.insertBefore(price,指定节点)]

    [添加属性
  book.setAttribute("name","xxxx")name属性value值为xxxx]

以上只是在内存中添加了,要经过转换到xml文档中输出(增删改都需要这一步)

TransformerFactory tffactory = TransformerFactory.newInstance();
Transformer tf = tffactory.newTransformer();
tf.transform(new DOMSource(document),new StreamReult(new FileOutStream("xml文档地址")));

delete:  Element e = (Element)document.getElementsByTagName("xx").item(?);//得到要删除的节点

     Element book = (Element)document.getElementsByTagName("x").item(?);//得到要删除节点的爸爸

     book.removeChild(e);//删除子节点
             [e.getParentNode().removeChild(e);//删除e]
     [e.getParentNode().getParentNode().removeChild(e.getParentNode());//删除e的父节点]

update: Element e = (Element)document.getElementsByTagName("xx").item(?);//找到节点

      e.setTextContent("xxx");//更改内容

异常链不能断Catch Exception e

checked exception编译时异常
e.printStackTrace();
将异常作为返回值 用编译时异常
unchecked exception运行时异常,
throw new RuntimeException(e);报告给上层,随上层处不处理

原创粉丝点击