java基础(十九):XML

1.意义
2.使用场景
3.xml的语法
4.xml的两种约束:DTD,Schema(校验xml正确性)
5.xml的两种解析方式:dom解析,sax解析

1.意义:xml既能操作数据也能保留数据的关系

2.使用场景:

         (1).不同系统间的数据交换

         (2).用作配置文件

3.xml的语法:文档声明,元素,属性,注释,CDATA,特殊字符,处理指令

         文档声明:

                  <?xml version="1.0" encoding="gbk" standalone="true" ?>

                  standalone:是否依赖其他文件,true就是不依赖

          元素:标签

          注释:<!--xxx-->
          CDATA(将字符原样输出):<![CDATA[内容]]>

          特殊字符:<:&lt;    >:&gt;    &:&amp;    ":&quot;    ':&apos;

          处理指令:<?xml-stylesheet href="1.css" type="text/css" ?>(通知xml解析引擎用css文件显示xml内容)
 

4.xml的两种约束:DTD,Schema

         (1).校验xml正确性

                  var xmldoc = new ActiveXObject("MicroSoft.XMLDOM");//xm解析器对象

                  xmldoc.validateOnParse("true");//开启校验

                  xmldoc.load("book.xml");

                  xmldoc.parseError.line;

                  xmldoc.parseError.reason;

         (2).DTD约束(.dtd)

               导入DTD约束:

                           <!DOCTYPE 根元素名称 SYSTEM 地址 >//注:SYSTEM可以换成PUBLIC

                           <!DOCTYPE 根元素名称 [DTD约束内容]>

               语法:

                  元素:<!ELEMENT 元素名称 元素约束>

                           ^!.元素约束可以为ANY/EMPTY,表示任意都行/约束为空

                           ^2.(#PCDATA):字符串

                           ^3.(逗号分隔子元素),则子元素必须按照括号里的顺序写

                           ^4.(|分隔子元素),则子元素在括号给出的里面随便一个都行

                           ^5.子元素的数量符:  +:一次或多次    *:0次或多次    ?:0次或一次

                  属性:<!ATTLIST 元素名

                                    属性名1    属性类型1   属性约束1

                                    属性名2    属性类型2   属性约束2>

                           属性类型:CDATA,ID,ENUMRATED,ENTITY

                                    CDATA(字符串)

                                    ID(唯一)

                                    ENUMRATED(枚举)

                                    ENTITY(实体):引用实体(给xml调用的实体),参数实体(给DTD调用的实体)

                                             引用实体:<!ENTITY   实体名   "实体内容">

                                                      调用引用实体:&实体名

                                             参数实体:<!ENTITY % 实体名 "实体内容">

                                                      调用参数实体:%实体名

                           属性约束:#REQUIRED,#IMPLIED,#FIXED '固定值','默认值'

                                    #REQUIRED(必须有)

                                    #IMPLIED(可有可无)

                                    #FIXED '固定值'(固定值)

                                   '默认值'

         (3).Schema约束:注意理解命名空间(.xsd)

                  例子:

                  Schema文件:

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

                           <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

                           <xs:element name="shiporder">

                                    <xs:complexType>

                                    <xs:sequence>

                                              <xs:element name="orderperson" type="xs:string"/>

                                              <xs:element name="shipto">

                                                      <xs:complexType>

                                                      <xs:sequence>

                                                               <xs:element name="name" type="xs:string"/>

                                                               <xs:element name="address" type="xs:string"/>

                                                               <xs:element name="city" type="xs:string"/>

                                                               <xs:element name="country" type="xs:string"/>

                                                      </xs:sequence>        

                                                      </xs:complexType>    

                                              </xs:element>

                                    </xs:sequence>

                                    </xs:complexType>

                           </xs:element>

                           </xs:schema>

                  xml文件:

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

                           <pgg:shiporder xmlns:pgg(名称空间)="www.pgg.com"

                                             xmlns:xsi(著名地址)="http://www.w3.org/2001/XMLSchema-instance"

                                             xsi:schemaLocation(名称空间对应的Schema地址)="www.pgg.com ship.xsd">

                           <pgg:orderperson>aaa</pgg:orderperson>

                           <pgg:shipto>

                                    <pgg:name>aaa</pgg:name>

                                    <pgg:address>aaa</pgg:address>

                                    <pgg:city>aaa</pgg:city>

                                    <pgg:country>aaa</pgg:country>

                           </pgg:shipto>

                           </pgg:shiporder>

5.xml的两种解析方式:dom解析,sax解析

         (1).dom解析:

                  优点:(1)增删改查很方便    (2)一次解析多次使用

                  缺点:(1)需要先解析才能操作    (2)要存放在内存中,耗内存资源

         (2).sax解析

                  优点:(1)不需要先解析    (2)不需要存放到内存

                  缺点:(1)只能做查询    (2)解析完只能用一次

         

         (3).dom4j解析xml

                   ^1.获取根节点

                           SAXReader reader = new SAXReader();

                           Document doc = reader.read("book.xml");

                           Element root = doc.getRootElement();

                  ^2.修改

                           XMLWriter writer = new XMLWriter(new FileOutputStream("book.xml"),OutputFormat.createPrettyPrint());

                           writer.write(dom);

                           writer.close();

                  ^3.增

                           Element booEle = root.element("书");

                           Element priceEle = DocumentHelper.createElement("价格");

                           priceEle.setText("40元");

                           bookEle.add(priceEle);

                  ^4.删

                           Element priceEle = root.element("书").element("价格");

                           priceEle.getParent.remove(priceEle);

                  ^5.改

                           root.element("书").element("价格").setText("20元");

                  ^6.查

                           List<Element> list = root.elements();

                           Element ele = list.get(1);

                           System.out.println(ele.element("书名").getText());

                  7.设置属性

                           Element bookEle = root.element("书");

                           bookEle.addAttribute("出版社","中信出版社");

                           String str = bookEle.attributeValue("出版社");

         (4).sax解析xml

                  public void main(String[] args) throws Exception{

                           SAXParserFactory factory = SAXParserFactory.newInstance();//SAX解析器工厂

                           SAXParser parser = factory.newSAXParser();//SAX解析器

                           XMLReader reader = parser.getXMLReader();//读取器

                           reader.setContentHandler(new MyContentHanlder);//注册事件处理器

                           reader.parse("book.xml");

                  }

                  注:事件处理器可以implements ContentHandler,也可以extends DefaultHandler

                  

 

猜你喜欢

转载自blog.csdn.net/qq_40594696/article/details/85812593