加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

日常小结-xml编程(CRUD)

发布时间:2020-12-16 08:35:06 所属栏目:百科 来源:网络整理
导读:XML解析技术概述 XML解析方式分为两种:dom和sax dom:(Document Object Model)W3C组织推荐的解析XML的一种方式。 sax:(SImple API forXML)几乎所有XML都支持它 dom和sax解析的不同: dom先把整个文档放到内存中然后生成一个dom对象。文档内的每个节点

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元");
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读