java基础之xml

1.xml的概念:可扩展的标记语言,一种描述数据的格式。
         *
         * xml的作用:1)存储xml格式的数据在文件  2)在网络传输xml的数据  ....
         *
         * 常用的描述数据的格式
         *
         * 1)Properteis:java特有的数据格式,java有对应的api。
         *
         * 2)xml:通用的数据格式,各语言都支持,都有对应的api。
         *
         * 3)json:通用的数据格式,各语言都支持,都有对应的api。
         *
         * xml和json对比
         * xml:格式-》描述数据更加清晰,占用的内存更大。
         * json:格式-》描述数据没有xml清晰,占用的内存小。
         *
         * xml的语法
         *
         * 1)xml的声明
         *
         * <?xml version="1.0" encoding="编码字符集" ?>
         *
         * 2)xml的数据-》xml的标记进行描述
         *
         * -》开始标记
         * <标记名     属性名="属性的值"   属性名="属性的值" ...>   
         *       a)文件内容 b)子标记
         * -》结束标记
         * </标记名>
         *
         * -->开始标记和结束标记之间-可以写(a)文件内容 b)子标记 )-》一般只写一种
         *
         * 标记名-》对应数据的名字
         * 标记的数据描述:
         * a)属性 :少量的数据
         * b)文本内容 :比较长的数据
         * c)子标记:描述相似的多个子数据

        XML标记注意点
        
1)描述数据必须通过标记
2)标记名,属性名等 都是严格区分大小写
3)标记必须有结束  如果标记没有【元素的文本内容】或【子标记】可以直接<标记名/>结束
例如:<person name="李四" age="18" />
4)属性的值必须用(单或双)引号包裹(推荐双引号)
5)xml文件描述数据有且只能有一个根标记

6)标记要正确嵌套

2.xml常用解析:sax和dom解析两种方式
    java官方(jdk)提供了javax.xml.parsers包:sax和dom解析xml的包

sax解析特点:
         1)基于事件模型,每次读取数据会调用对应的事件
         2)每次读取的数据不保存
         3)读取消耗的内存小
         4)解析数据-复杂
         
dom解析特点:
        1)直接把整个xml文件读取到程序中封装为一个Document对象, Document对象可以得到根标签Element,通过根标签Element,得到各种子标签
        2)每次读取的数据保存在document中
        3)读取消耗的内存大
        4)解析数据-简单

dom和sax对比:
    1)sax性能好,处理数据麻烦。
    2)dom性能差,处理数据方便。
    3)因为一般处理的xml数据量小--实际开发都使用dom。
         *
         *
         * 最基本的xml解析(先sax再dom)

sax解析:
   读取xml数据
  1)得到sax解析器工厂
  SAXParserFactory factory = SAXParserFactory.newInstance();
  2)通过工厂得到sax解析器
  SAXParser saxParser = factory.newSAXParser();
  3)通过sax解析器解析xml文件,并注册用于解析的处理器
   saxParser.parse(in,new Handler());
处理器:用于回调的对象,包含了很多处理xml数据的方法,当解析到xml数据的时候,会
调用处理器的对应处理方法。

3.dom解析xml
         *
         读取xml数据
        
  1)得到dom解析器工厂
DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();
  2)通过工厂得到dom解析器
 DocumentBuilder builder = factory.newDocumentBuilder();
  3)通过dom解析器解析xml文件,得到对应文件的document对象。
  Document doc = builder.parse(in);
 
  4)去doc对象找到所需要的数据
    a)找到document对象的跟标记
         Element  getDocumentElement()  
    b)找到标记里所有的【指定标记名字】子标记
        NodeList getElementsByTagName(String name)
     NodeList-》接口-相当于  List<Node>    
        
    c)找到标记里文本内容
        String getTextContent()  
    d)找到标记里指定属性名的属性值
        String getAttribute(String name)
4.dom和sax对比:
    1)sax性能好,处理数据麻烦。
    2)dom性能差,处理数据方便。
    3)因为一般处理的xml数据量小--实际开发都使用dom。
    
        jdk官方的api:都有明星的缺点
        第三方组织提供了对xml解析的jar包(包含了很多class类的功能):jdom,dom4j...
        jdom:结合了sax和dom的优点,简化了dom的api。
         *
         *
         * classPath:配置项目需要使用的第三方组织或个人提供的jar文件(类的功能)
         * eclipse-》项目-右键-buildpath-》就是用来配置classpath的
         *
         * jdom的api
         *
         * 1)读取xml的数据
         * 入口-》org.jdom2.input
         *
         * a)创建解析器
         * SAXBuilder sax=new SAXBuilder();
         *
         * b)通过解析器解析xml文件为document对象
         * document doc对象=sax.build(文件)
         * -》document是jdom的对象
         *
         * c)通过document对象找数据
         *  1)找到document对象的跟标记
         *      getRootElement()
            2)找到标记里所有的【指定标记名字】子标记
                getChildren(java.lang.String cname)
            3)找到标记里【指定标记名字】第一个子标记
                getChild(java.lang.String cname)    
            
            4)找到标记里所有的子标记
                getChildren()
            3)找到标记里文本内容
                    getText() -》原始内容
                    getTextTrim()-》去左右空白的内容
            4)找到标记里指定属性名的属性值
                getAttributeValue(java.lang.String attname)    ->拿到字符串的值
                getAttribute(java.lang.String attname).get数字类型Value()-》拿到数字的值

5.jdom的api
         *
         * 2)把程序的数据写出到xml文件存储
         *
         * 入口-》org.jdom2.output
         *
         * 例如:写的数据
            张三,18,男
            2个朋友:柳岩,17- 刘德华 ,19
         *
         * 建立xml的格式
         * <person name="张三" age="18" sex="男">
         *         <friend name="柳岩" age="17" >java工程师</friend>
         *         <friend name="刘德华" age="19">ios工程师</friend>
         * </person>
         * a)创建document对象-》装我们要写出的xml数据
         *   1)创建document对象
         *     new  Document()
         *     
         *   2)创建标记person,friend
         *     new  Element(标记的名字)
         *   
         *   3)设置标记的属性名和属性值
         *         setAttribute(java.lang.String name, java.lang.String value)
         *     
         *   4)设置标记的文本内容
         *     setText(java.lang.String text)
         *   
         *   --》建立关系
         *   
         *   5)把根标记添加到document对象中
         *       setRootElement(Element rootElement)
         *   6)把标记添加到父标记
         *      -》父标记.add...(子标记)
         *      addContent(Content child)
         *      
         * b)利用XMLOutputter的output把document对象的数据
         * -》写到指定的输出流对应的数据源里。
         *
         *   1)创建XML输出器XMLOutputter对象
         *   new XMLOutputter();
         *     new XMLOutputter(format格式化的对象);
         *     
         *     Format.getPrettyFormat()->漂亮的格式对象
         *     
         *   2)利用xml输出器把【document对象】的数据输出到指定【输出流】对应的数据源里。
         *      输出器.output(document对象,输出流);
         *
         *
         *  c)更新xml数据
         *  
         1)读取xml数据-》到docuemnt对象中
         2)把docuemnt对象中数据做修改
         3)把document对象的数据写出到xml中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值