xml简介和dom4j解析xml重要方法

1.xml(可扩展标记语言)的概述
    与html的区别:
        xml: 描述数据,用于存储和传输数据。标签都是自定义的
        html:显示数据,标签都是预定义的
        
    注意事项:
    文档声明必须在第一行
    只有一个根标签
    元素只能包裹嵌套,不能交叉嵌套
    注释不能嵌套
    标签命名规则:字母、数字、下划线、减号、英文句点组成,严格区分大小写
    属性值要用单引号或双引号

2.约束文档
    1.DTD(Document tyte definition)--->约束xml的书写规范
        a DTD文件的书写
            <?xml version="1.0" encoding="UTF-8"?>   //文档声明
            <!ELEMENT 书架 (书+)>
            <!ELEMENT 书(书名,作者,售价)>
            <!ELEMENT 书名(#PCDATA)>
            <!ELEMENT 作者(#PCDATA)>
            <!ELEMENT 售价(#PCDATA)>
        b DTD文件的引入
            <?xml version="1.0" encoding="UTF-8"?>         
            <!DOCTYPE 书架 SYSTEM "book.dtd">    //可以在xml文件创建时自动生成
            <书架>
                <书>
                    <书名></书名>
                    <作者></作者>
                    <售价></售价>
                </书>
            </书架>
        
    2.Schema的概述:--->符合xml语法,拓展名.xsd
        对比 Schema 和 DTD
        a.XML Schema符合XML语法结构。 
        b.DOM、SAX等XML API很容易解析出XML Schema文档中的内容。 
        c.XML Schema对名称空间支持得非常好。 
        d.XML Schema比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型。 
        e.XML Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。
        约束文档:    <?xml version="1.0" encoding="UTF-8"?>                                                             
                    <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'   //标准名称空间  xmlns意思为xml名称空间
                        targetNamespace='http://www.itheima.com'>            //自定义名称空间
                        <xs:element name='书架'>                             //约束根标签
                            <xs:complexType>                                //表示根标签为复杂类型,可以有子标签
                                <xs:sequence maxOccurs='unbounded'>            //表示子元素有顺序  属性为unbounded表示子标签的数量不限
                                    <xs:element name='书'>                    
                                        <xs:complexType>
                                            <xs:sequence>
                                                <xs:element name='书名' type='xs:string' />
                                                <xs:element name='作者' type='xs:string' />
                                                <xs:element name='售价' type='xs:string' />
                                            </xs:sequence>
                                        </xs:complexType>
                                    </xs:element>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                    </xs:schema>

        引入约束文档:
                    <?xml version="1.0" encoding="UTF-8"?>                  
                        <itheima:书架 xmlns:itheima="http://www.itheima.com"
                        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:schemaLocation="http://www.itheima.com book.xsd">

                        <书>
                            <书名>书名</书名>
                            <作者>作者</作者>
                            <售价>售价</售价>
                        </书>

                    </itheima:书架>
                    
3.XML的解析
        解析的含义: 采用Java代码操作(增,删,改,查)我们的XML文件里面的内容.
        常见的解析方式:
            DOM:把所有的节点数据,全部加载到内存当中.解析方便,容易出现内存溢出
            SAX:逐个节点进行解析,不会出现内存溢出,解析较为繁琐.
        提供的解析操作:
            JAXP:sun公司提供
            DOM4j:开源框架,需要导入jar包
            
4.Dom4j常用的方法:
    a需要导入jar包
    
    b创建对应的document对象----> dom4j-1.6.1---docs---index.html---quick start---Creating a new XML document
        SAXReader reader = new SAXReader();  //获取解析器对象
        Document document = reader.read(url);  //通过解析器获取文件对象,参数url为xml的文件路径的字符串
        重要方法:Element getRootElement() //通过文件对象,获取根标签对象
    Element
        创建元素对象的方式:
            DocumentHelper.CreatElement(String name);  //创建一个新的元素对象,参数为要创建的对象的名称
        常用方法
            获取方法:
                获取文本/属性:
                    String  attributeValue(String name):     //根据指定的属性名称获取其对应的值
                    String  getText() :                      //获取当前元素对象的文本
                    String  elementText(String name)           //获取名称为name的子元素中的文本
                获取子元素对象:
                    Element element(String name):            //获取元素名称为name的子元素对象,如果有重复,返回第一个
                    List elements() :                        //获取所有的子元素
                    List elements(String name):            //获取元素名称为name的所有子元素集合
                获取父元素对象
                    Element getParent();
                    
            添加元素
                add(Element e)       //添加子元素
                
            修改文本、属性:   
                void setText(String text):              //设置当前元素对象的文本
                Element addAttribute(String name,String value): //根据指定的属性名称和值进行添加或者修改 参数为属性名和属性值
                
            删除方法:
                remove(Element e);    //删除子元素,参数为元素对象
                
        将文件写入XML文件中
            //获取格式化对象
            OutputFormat format=OutputFormat.createCompactFormat();
            //获取字节流
            FileOutputStream fos=new FileOutputStream(path);
            //获取写xml对象
            XMLWriter xw=new XMLWriter(fos,format);
            //写文件
            xw.write(d);   //参数为文件对象
                
                
                
                
                
                
                

猜你喜欢

转载自www.cnblogs.com/liuxuelin/p/10140684.html