zoukankan      html  css  js  c++  java
  • xml解析

    首先大家要知道XML有约束,约束的两种方式分别是dtdschema;

    约束的好处:可以去规范我们的xml标签(根据自己的要求)可以在工具上有相应的提示;

     DOM模型

    ①对与DOM来说 ,一切都是节点Node;

    Document可以看成一个节点,Element可以看成一个节点,Text可以看成一个节点,

       封装出来的对象都可以看成节点Node;

    ③在JDK中,NodeDoucument(文档),Element(标签元素),Text(文本对象), Attr(属性对象)的父接口;

    原生API解析XML

    d

     Dom4j引入

    我们已经使用原生的APIJDK提供的,是属于w3c 里面知识去解析XML,但是我们完成的代码还不够简单,比如在添加的时候,比较麻烦; 但是可以直接拿到里面很深的标签; 为什么可以拿到?

    由于原生解析 ,一次把XML里面的所有内容全部解析完,所有这些对象,都已经存在内存里面;所有可以拿到,但是这样存在什么问题?

    第一次就会把内容全解析,非常浪费内存,解析也浪费时间

    原生API有自己的问题,原生API的解析方法还不够灵活简单,应该对应解析XML这种非常常用的功能,有很多人做了一些工具(jar包)(别人写了代码,来增强解析我们解析XML的能力)---

    其中一个非常出名的一个解析工具 叫做dom4j  ---dom for java

    拿到一个节点的文本

    需求:取出第二个联系人的名字

    分析:①先得到根(contacts  -- doc.getRootElement();

          ②在根下面的某一个节点     -- root.elements(“linkman”)

    ③确定拿到某个linkman.elementText(“name”)

    element elements方法区别:

    如果能够确定需要拿到的这个元素(当前这个元素linkman)只有一个,那么可以直接使用element,它就把唯一的一个返回给我们

     

    修改一个元素

     需求:把第一个联系人的邮箱改掉

     需要同步:把内存的文档 同步到 硬盘上的xml

      同步代码: doc写到xml里面

     //创建一个xml输出流

      FileWriter out = new FileWriter(file);

     //doc(内存)写入到 xml输出流

      doc.write(out);

     //关闭流资源

      out.close();

    添加linkman元素

      需求:增加一个联系人

      添加元素:-- root.addElement(“标签名称”)

      设置值:--linkman.addElement(“name”).setText(“张三”);

     

    设置/获取联系人的id属性

    设置/获取联系人的id属性

    获取联系人id属性值: linkman.attributeValue(“id”)

    设置联系人id属性值: linkman.addAttribute(“id”,”999”)

    删除一个指定元素

    删除第三个联系人信息

    linkman.getParent().remove(linkman)

    先去找到父节点,在根据父节点删除指定子节点;

    4.使用原生API操作XML文件(掌握)

     分析:

    ①获取document对象

    (先从DocumentBuilderFactory-->DocumentBuilder--Document)

    ②通过document获取根元素

     document.getDocumentElement();

    ③通过根去获取指定的元素root.getElementsByTagName("linkman")

    ④可以获取linkman元素里面的一些值

    linkman.getElementsByTagName("name").item(0)

    ⑤获取name里面的值

    name.getTextContent()

     

    5.使用DOM4J操作XML文件(掌握)

     ①获取document对象

    SAXReader reader = new SAXReader();

      File f = new File("G:\20170220JAVA精英班\workspace\day05_xml\src\schema\contacts.xml");

          Document doc = reader.read(f);

     ②获取根元素

     Element root = doc.getRootElement()

     ③List elements = root.elements("linkman");

     ④获取name的元素

     Element name = linkman.element("name");

     ⑤获取name的具体值

    linkman.elementText("name")

  • 相关阅读:
    解决ssh: connect to host github.com port 22: Connection refused
    sudo/su命令免密执行
    Linux tar.gz、tar、bz2、zip 等解压缩、压缩命令详解
    项目实战——校验文件名和邮箱地址
    项目实战:判断闰年平年并输出某月的天数
    ubuntu软件更新时出现没有Release文件
    项目实战:根据出生日期判断星座
    项目实战--实现淡旺季飞机票打折
    xxx.java:1: 错误: 类xxx是公共的, 应在名为 xxx.java 的文件中声明 public class xxx
    32位int整数范围
  • 原文地址:https://www.cnblogs.com/wzscom/p/10518840.html
Copyright © 2011-2022 走看看