XML编程(CRUD)-create read update delete(DOM解析)

本文介绍DOM解析方式,并通过实例演示如何读取、添加、删除及更新XML文档中的节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XML解析方式分为两种:dom和sax

 .dom:(Document Object Model,即文档对象模型)

  是W3C组织推荐的解析XML的一种方式

 .sax :(Simple API for XML),不是官方标准,但它是XML社区事实上的标准,几乎所有的XML解析器都支持它

Dom和sax解析方法的区别

1.dom解析的优点是对文档crud比较方便,缺点是占用内存比较大

2.sax解析的优点是占用内存少,解析速度快,缺点是只适合做文档的读取,不适合做文档的crud

调整jvm(java虚拟机)大小

XML解析开发包

  jaxp(sun),jdom,dom4j


JAXP:

   JAXP开发包是J2SE的一部分,由javax.xml,org.w3c.dom,org.xml.sax包及其子包组成

  在javax.xml.parsers包中,定义了几个工厂类,程序调用这几个工厂类,就可以得到xml文档的DOM或SAX的解析器,从而实现对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对象来表示数据的目的地

    .Transformer对象通过TransformerFactory获得

举例:book.xml

<?xml version="1.0" encoding="UTF-8" ?>

<书架>

    <书> 

        <书名 name = "xxxx ">java 就业培训教程</书名>

        <作者>张孝祥</作者>  

        <售价>39.00元</售价>

    </书>

    <书> 

        <书名 >javaScript网页制作</书名>

        <作者>张孝祥</作者>  

        <售价>28.00元</售价>

    </书>

</书架>

1.创建工厂

   DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

2.得到DOM解析器

 DocumentBuilder builder = factory.newDocumentBuilder();

3.解析XML,得到代表文档的document

 Document document = builder.pase("src/book.xml")

4.使用dom方式对xml文档进行crud

----// 读xml文档中:<书名>javaScript网页开发</书名>  节点中的值

NodeList list = document .getElementsByTagName("书名");

Node node = list.item(1);

String content = node.getTextContent();

system.out.println(content);——>结果显示:javaScript网页开发

---// 得到xml标签属性的值:<书名 name="xxxx" >javaScrip就业培训课程</书名>  

Element bookname =  document.getElementsByTagName("书名").item(0);

String value = bookname.getAttribute("name");

system.out.println(value );——>结果显示:xxxx

-----//向xml文档中指定位置上添加节点:<售价>59.00元</售价>

 //创建节点

  Element price = document.createElement("售价");

 price.setTextContent("59.00元");

// 得到参考节点

Element refNode = (Element)document.getElementByTagName("售价").item(0);

//得到要挂孩子的节点

Element book= (Element)document.getElementByTagName("书").item(0);

//往book节点指定位置插孩子

book.insertBefore(price,refNode );

//更新后的内存写到xml文档中

 TransformerFactory tffactory = TransformerFactory.newInstance();

Transformer tf = tffactory .newTransformer();

tf.transform(new DomSource(document),new StreamResult(new FileOutputStream("src/book.xml")))

结果:

<?xml version="1.0" encoding="UTF-8" ?>

<书架>

    <书> 

        <书名 name = "xxxx ">java 就业培训教程</书名>

        <作者>张孝祥</作者>  

        <售价>59.00元</售价>

        <售价>39.00元</售价>

    </书>

    <书> 

        <书名 >javaScript网页制作</书名>

        <作者>张孝祥</作者>  

        <售价>28.00元</售价>

    </书>

</书架>

//得要要删除的节点

  Element e = (Element)document.getElementByTagName("售价").item(0);

////得到要删除节点的爸爸

//Element book= (Element)document.getElementByTagName("书").item(0);

////爸爸再删孩子

//book.removeChid(e);

 e.getParentNode().removeChild(e);

//更新后的内存写到xml文档中

 TransformerFactory tffactory = TransformerFactory.newInstance();

Transformer tf = tffactory .newTransformer();

tf.transform(new DomSource(document),new StreamResult(new FileOutputStream("src/book.xml"))

//更新售价

Element e = (Element)document.getElementByTagName("售价").item(0);

e.setTextContent("109.00元");

//更新后的内存写到xml文档中

 TransformerFactory tffactory = TransformerFactory.newInstance();

Transformer tf = tffactory .newTransformer();

tf.transform(new DomSource(document),new StreamResult(new FileOutputStream("src/book.xml"))



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值