日常小结-xml编程(CRUD)

XML解析技术概述

XML解析方式分为两种:dom和sax
dom:(Document Object Model)W3C组织推荐的解析XML的一种方式。
sax:(SImple API forXML)几乎所有XML都支持它

  • dom和sax解析的不同:

    dom先把整个文档放到内存中然后生成一个dom对象。文档内的每个节点也会变成一个对象,变成Element,Text,attribute对象。然后在建立对象间关系。
    优点:增加改查比较容易。可以通过调用对象方法来计算。
    缺点:内存消耗大
    sax从上往下读,依次处理
    优点:内存消耗小
    缺点:不适合增改。


这里写图片描述

XML解析开发包:

Jaxp(sun)、Jdom,dom4j JAXP是J2SE的一部分,javax.xml org.w3c.dom org.xml.sax及其子包组成 javax.xml.parsers包中,定义了几个工厂类,调用工厂类可以得到dom或者sax解析器。从而实现xml文档的解析
  • 使用jaxp进行dom解析:
    DocumentBuilderFactory用于创建DOM模式的解析器对象。
    例子
//1.创建工厂
    DocumentBuilderfactory factory =    DocumentBuilderFactory.newInstance();
//2.得到dom解析器
    DocumentBuilder builder = factory.newDocumentBuilder();
//3.解析xml文档,得到代表文档的Document
    Document document = builder.parse("src/book.xml");
  • Document对象的操作:
public void read(){
    DocumentBuilderfactory factory =    DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document document = builder.parse("src/book.xml");
    NodeList book = document.getElementsByTagName("书名");//Node是ELement,attribute,text的超类
    Node node = list.item(1);
    String content = node.getTextContent();
    System.out.println(content);

}

添加xml元素及更新XML文档

javax.xml.transform包中的Transformer类用于把代表xml文件的Document对象转换为某种格式后进行输出,例如把xml文件应用样式表后转成一个html文档。利用这个对象,当然也可以把Document对象重新写入到一个xml文件中。

Transformer类通过transform方法完成转换操作,该方法接受一个源和一个目的地。我们可以通过:

javax.xml.transform.dom.DomSource类来关联要转换的document对象
用javax.xml.transform.stream.StreamResult对象来表示数据的目的地。

Transform对象通过TransformFactory获得。

public void add() throws Exception{
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Doument document = builder.parse("src/book.xml");
    //创建节点
    Element price = document.createElement("售价");
    price.setTextContent(textContent)

    //得到参考节点
    Element refNode = (Element) document.getElementByTagName("售价").item(0);

    //把得到插入的父节点
    Element book = (Element) document.getElementByTagNAme(“书”).item(0);

    //往book节点的指定位置插入子节点
    book.insertBefore(price,refNode);
/*
    //创建的节点挂到第一本书上
    Element book = (Element) document.getElementByTagName("书").item(0);
    book.appendChild(price);
*/
    //把更新后的内存写回到xml文档
    TransformerFactory tffactory = TransformerFactory.newInstance();
    Transformer tf = tffactory.newTransformer();
    tf.transform(new DOMsource(document),new StreamRsult(new FileOutputStream("src/book.xml")))
}

添加属性

public void addAttr() throws Exception{
    DocumentBuilderFactory  factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document document = builder.parse("src/book.xml");

    Element booknames = (Element) document.getElementSByTageName("书名").item(0);
    bookname.setAttribute("name","XXXXX");

    TransformerFactory tffactory = TransformerFactory.newInstance();
    Transformer tf = tffactory.newTransformer();
        tf.transform(new DOMsource(document),new StreamRsult(new FileOutputStream("src/book.xml")))
}

删除售价

public void delete() throw Exception{
    DocumentBuilderFactory  factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document document = builder.parse("src/book.xml");

    //得到要删除的节点
    Element e = (Element) document.getElementsByTagName("售价").item(0);

    //得到要删除的节点的父节点
    ELement book = (Element) document.getElementsByTagName("书").item(0);

    book.removeChild(e);
}
public void delete() throw Exception{
    DocumentBuilderFactory  factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document document = builder.parse("src/book.xml");

    //得到要删除的节点
    Element e = (Element) document.getElementsByTagName("售价").item(0);
    e.getParentNode().remove(e);
}

更新节点

public void update() throw Exception{
    DocumentBuilderFactory  factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document document = builder.parse("src/book.xml");

    //得到要删除的节点
    Element e = (Element) document.getElementsByTagName("售价").item(0);
    e.setTextContent("109元");
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值