A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

#day 08XML回顾

##xml概述
* 可扩展的标记语言 允许用户自定义标签
* 用于传输 和 存储数据
```
文档声明
注释
元素
属性
特殊字符和CDATA区
```
##XML的语法
* 基本语法
* 必须有关闭标签
* 区分大小写
* 属性需要有引号
* 必须正确的嵌套
* XML的文档声明
* 在XML的第一行 第一列的位置
* `<?xml 属性名=”属性值” 属性名=”属性值” ...?>`
* `* version    :必须的. 使用”1.0”`
* XML的注释
* <!-- XML的注释 -->
* XML的元素(标签)
* 不能以字符xml开始
* 不能以数字或标点开始
* 不能包含空格 :冒号
* xml的属性
* 与元素命名规范相同
* 需要使用引号!
* 特殊字符和CDATA区
```
* &lt;---<  小于
* &gt;--->   大于
* &amp;---&   与
* &apos;---'  单引
* &quot--- "  双引
```
* XML的CDATA区:(CDATA:Character Data)
   * `< ! [ CDATA [  内容  ] ] >`
##XML的解析
* 从XML文档中获取想要的数据(由代码完成)
* DOM解析 `Document Object Model.`
  * 一次性加载 形成数形结构进行解析
   * 可能内存溢出
   * 对XML的增删改
* SAX解析 `Simple Api for XML.`
  * 事件驱动方式, 一行一行的进行解析
   * 不会内存溢出  操作较慢
   * 不能对XML的增删改  
##DOM4J的使用
* DOM4J的入门案例步骤:
```
*【步骤一】导入jar包.dom4j-1.6.1.jar
*【步骤二】创建解析器 ` new SaxReader()`
*【步骤三】解析文档获得代表文档的Document对象. `new SAXReade().read("XML的路径")方法获取Document对象。`
*【步骤四】获得跟节点.  `通过Document对象的getRootElement()得到根节点`
*【步骤五】从跟节点下查找其他的节点. 使用根节点获取他下面的节点element() elements(“标签名称”)
```
##XPath的使用
* XPath的入门案例步骤:
```
*【步骤一】导入jar包.`dom4j-1.6.1.jar` DOM4J支持XPath的jar包:`jaxen-1.1-beta-6.jar`
*【步骤二】创建解析器 ` new SaxReader()`  
*【步骤三】解析文档获得代表文档的Document对象. `new SAXReade().read("XML的路径")方法获取Document对象。`
*【步骤四】常用的方法 `List document.selectNodes(String xPath)    Node document.selectSingleNode(String xPath)`
##XML的约束
* 用来越是XML的文档中可以出现那些标签,不能出现那些标签,标签中是否有吮吸,出现的次数
* 用来规范XML的写法
* XML的约束的种类及区别?
     * DTD 和 Schema    :
   * 区别:
      1.DTD语法是自成一体的.Schema语法就是XML的语法.
      2.Schema的语法就是XML的语法所以更容易被解析器所解析.
      3.Schema支持名称空间.
      4.Schema有比DTD更加强大的语义和语法的约束.
## DTD的语法:
```
* 元素:
* <!ELEMENT 元素名 元素类型>
    * 元素类型:
       * EMPTY
       * ANY
       * 子元素
           * 是否有序: 使用 逗号(,)或者竖线(|)表示.
           * 出现的次数:?:零次或一次 +:一次或多次 *:零次或多次
         * PCDATA
* 属性:
* <!ATTLIST 元素名称 属性名称 属性的类型 属性的约束>
   * 属性的类型:
     * ID类型:表示属性值需要是唯一的.
     * CDATA类型:普通的字符串.
      * 枚举:
   * 属性的约束:
```
##Schema的语法
```
* 名称空间:一个XML只能引入一个DTD约束文档.使用了Schema约束XML文档,一个XML可以引入多个Schame的约束!!!
如果再多个Schema文档中定义了相同的属性名称 该怎么办?
* 名称空间类似于java中的package.通过名称空间区分 标签或属性来自于哪个文档的!!!通常名称空间唯一的不重复的即可.一般情况下使用一个URL地址表示一个名称空间.
```

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马