zoukankan      html  css  js  c++  java
  • XML

    一.XML概述
         定义:Extensible Makeup Language(可扩展标记语言);
         作用:
             1.存储数据,有良好的存储格式,多种语言通用
             2.作为配置文件,许多框架都使用xml作为配置文件
         语法:
             1.文件后缀名必须为.xml;
             2.文档声明必须写在第一行,且前面不能空格,一般写法:<?xml version="1.0" encoding="UTF-8"?>;
             3.注释格式:<?--    -->(ST快捷键 ctrl+shift+/);
             4.元素(标签):xml文件的基本组成部分,由开头和结尾组成:开头由一对<>和元素名组成;结尾<>内多一正斜杠,如:<Peson></Person>;
             5.根元素:最先出现的元素,根元素只有一对;
             6.元素体:元素两个<>中出现的文本,如<Person>text</Person>中的text称为元素体;
             7.属性:元素的组成部分,写在开始标签里.属性名必须以英文字母开头,不能有空格且不能重复,格式为:属性名=属性值,属性值需用""或''包裹,如<Person id="001"></Person>,id即为属性
             8.转义字符:> ----- &lt; < ---- &gt; " ---- &quot; ' ---- &apos; & ---- &amp;
             9.CDATA区:格式<?[CDATA[--内容--]]>,内容区直接原样展示,不被xml解析器解析;
         关于文档声明的补充:
             <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
             1.声明语句必须有version属性,encoding和standalone是可选的;
             2.三个属性同时存在时必须按上述顺序排列;
             3.如果没有声明encoding属性,则解析时默认采用uft-8或utf-16;如果不声明,解析器也不支持utf-8吉utf-16,则引起解析出错;
             4.standalone只有两个值"yes"或"no",no表示文档可能依赖于一个DTD文件存在;yes表示可以独立存在.
    二.XML解析
         两种方式:
             SAX解析:逐行解析;效率高,不易出现内存不足的情况;但是只能对xml解析,且不能进行增删改的操作
             DOM解析:将整个文件加载到内存中,形成一个Document对象,对该对象进行解析,优点是可以进行增删改的操作,但是容易出现内存不足的情况
         解析工具:常用工具为dom4j.jar包
             JAXP:sun公司提供支持DOM和SAX开发包
            JDom:dom4j兄弟
            jsoup:一种处理HTML特定解析开发包
            dom4j:比较常用的解析开发包,hibernate底层采用。

    三.Dom4j的常用API
         SAXReader类:
             定义:public class SAXReader extends Object
             构造方法:
                 SAXReader()
             普通方法:
                 public Document read(String systemId) throws DocumentException{}:根据路径读xml文件,得到一个文档对象!
         Document接口:
             定义:public interface Document extends Branch
             普通方法:
                 public Element getRootElement(){}:获取根标签对象
         Element接口:
             定义:
                 public interface Element extends Branch
             普通方法:
                 public Element element(String name){}:Returns the first element for the given local name and any namespace.
                 public Element element(QName qName){}:Returns the first element for the given fully qualified name.
                 ==========================================================================================================
                 public List elements(){}:获取该标签对象下的所有子标签
                 public List elements(String name){}:面向该元素对象,获取指定名称的子标签
                 public String attributeValue(String name){}:面向元素对象,根据属性名获取属性值
                 public String getText(){}:面向该元素对象,获取元素体;(如果元素体是一个标签,会得到null)
                 =============================================================================================
                 public Iterator elementIterator(){}:Returns an iterator over all this elements child elements.
                 public Iterator elementIterator(QName qName){}:Returns an iterator over the elements contained in this element
                                                                 which match the given fully qualified name.
                 public Iterator elementIterator(String name){}:Returns an iterator over the elements contained in this element
                                                                 which match the given local name and any namespace.   
                 =================================================================================================================                                                                                                                   
                 public String elementText(String name){}:
                 public String elementText(QName qname){}:

        Node接口:
             定义:public interface Node extends Cloneable
             普通方法:
                 public String getName(){}:返回该节点对象的名称

    代码演示:
        

      1 import java.util.List;
      2      import org.dom4j.Document;
      3      import org.dom4j.Element;
      4      import org.dom4j.io.SAXReader;
      5 
      6      public class XmlTest {
      7          public static void main(String[] args) throws Exception {
      8              // 创建SAXReader对象
      9             SAXReader sax = new SAXReader();
     10              // 获取Document对象
     11             Document document = sax.read("my.xml");
     12              // 面对Document对象获取根节点
     13             Element element = document.getRootElement();
     14 
     15              // 面向根节点元素,获取其下的名为servletClass子元素集合
     16             List<Element> servletClassList = element.elements("servletClass");
     17              // 迭代
     18             for (Element e : servletClassList) {
     19                  // 面向一级子元素获取其元素体
     20                 String text = e.getText();
     21                  // 获取元素名
     22                 String name = e.getName();// 多态
     23                 // 获取属性值
     24                 System.out.println(name + "结点元素的元素体为" + text);
     25              }
     26 
     27              // 面向根节点元素,获取其下的名为servlet子元素集合
     28             List<Element> servletList = element.elements("servlet");
     29              for (Element e : servletList) {
     30                  String idValue = e.attributeValue("id");
     31                  String nameValue = e.attributeValue("name");
     32                  System.out.println("servlet结点元素的ID为" + idValue);
     33                  System.out.println("servlet结点元素的name为" + nameValue);
     34              }
     35          }
     36      }

        

    三.DTD约束
         概述:文档类型定义(Document Type Definition)是一套为了进行程序间的数据交换而建立的关于标记符的语法规则。
         作用:用于限定xml的编写格式或内容;
         语法:
             1.Dtd文件的后缀名必须是.dtd;
             2.在文件的第一行第一列,写的是xml的文档约束;
             3.<!ElEMENT 元素名(对元素的约束) >
             4.限定属性的代码格式:
                 <!ATTLIST  要限定的元素名 属性名 属性的数据类型   该属性是否必须有>
             5.ID 类型:表示该属性值必须保证整个xml文件中唯一;
                 #REQUIRED:该属性必须添加
                 #IMPLIED:该属性可选;
             6.CDATA :表示文本数据类型,但是xml解析器不能解析;
             7.#PCDATA:表示文本数据类型,但是xml解析器要解析;
         与XML关联:3种
             1.针对某个xml文件中,直接写DTD的代码,只针对该xml一个文件生效;
                 <?xml version="1.0" encoding="utf-8" ?>
                 <!DOCTYPE beans [
                     ... //具体的语法
                 ]>
                 <beans>
                 </beans>
             2.单独写一个dtd文件,在xml中引入要遵守的dtd约束;可以针对多个xml文件生效;一般用在项目组或企业中;
                 <?xml version="1.0" encoding="utf-8" ?>
                 <!DOCTYPE beans SYSTEM "bean.dtd">
                 <beans>
                 </beans>
             3.单独写一个dtd文件,放在网上,所有可以联网的电脑,都可以引用该dtd约束;一般框架的编写者,会提供这样的约束;
             <?xml version="1.0" encoding="UTF-8"?>
             <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
             "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
             <beans>
            
             </beans>


    四.Schema约束
         概述:Schema约束文件的后缀名必须是:xsd;
         语法格式:
             1. <element> 声明元素(标签)
             2. 每一个元素必须确定类型:
                     complexType 复杂类型,该元素的内容会详细描述;
                     simpleType 
                         简单类型,一般不用,大部分都是复杂类型;该元素的内容都是纯文本
             3. 需要继续明确子标签顺序
                         <choice> 选择, ()
                         <sequence> 顺序 ,
                         <all>      任意
                         minOccurs 最少出现次数
                         maxOccurs 最大出现次数,
                         unbounded 不限制
             4.<attribute>用于给元素声明属性的
                         use 设置属性使用,
                         optional可选
                         required必选

  • 相关阅读:
    Lake Counting
    部分和问题
    迷宫最短路
    sublime 的使用技巧
    数组
    Factorial Trailing Zeroes
    Top K Frequent Elements
    Number of Connected Component in An Undirected Graph
    Zigzag Iterator
    Single Number III
  • 原文地址:https://www.cnblogs.com/huguangqin/p/7128834.html
Copyright © 2011-2022 走看看