我爱编程

Java EE -> Xml [QR]

2016-04-19  本文已影响0人  vpt
大纲:

  1. XML解析
  1. xPath技术
  1. XML约束

@XML解析

1) 引入

程序读取或操作xml文档,叫xml解析。

XML解析又分为两类,DOM解析与SAX解析。

2) 重点

1 DOM解析
- 原理:

xml解析器一次性把整个xml文档加载进内存,然后在内存中构建一颗Document的对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容。

- Dom4j解析工具
  Document doc = new SAXReader().read("xml文件");
element("名称")   指定名称的第一个子标签对象
elementIterator("名称");  指定名称的所有子标签对象
elements();  所有子标签对象
attributeValue(“名称”) 指定名称的属性值
attribute("名称")   指定名称的属性对象
getName()  属性名称
getValue()  属性值
atributeIterator()   所有属性对象(Iterator)
attributes()       所有属性对象(List)
getText()  得到当前标签的文本
elementText("子标签名称")  得到子标签的文本
  1. 写出内容到xml文档
XMLWriter writer = new XMLWriter(OutputStream, OutputForamt)
wirter.write(Document);
  1. 修改xml文档的API
DocumentHelper.createDocument()  增加文档
addElement("名称")  增加标签
addAttribute("名称",“值”)  增加属性
Attribute.setValue("值")  修改属性值
Element.addAtribute("同名的属性名","值")  修改同名的属性值
Element.setText("内容")  修改文本内容
Element.detach();  删除标签  
Attribute.detach();  删除属性
2 SAX解析

SAX解析工具由Sun公司提供的,内置在jdk的org.xml.sax.*中。

核心的API:
3 DOM解析 VS SAX解析(*面试题)
方面 DOM解析 SAX解析
原理 一次性加载xml文档,不适合大容量的文件读取 加载一点,读取一点,处理一点。适合大容量文件的读取
读写 读写 只读
方向 任意读取任何位置的数据,甚至往回读 从上往下,按顺序读取,不能往回读
方式 面向对象的编程方法(Node、Element、Attribute), Java开发者编码比较简单 基于事件的编程方法 , java开发编码相对复杂

@xPath技术

)1 引入

问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!

)2 xPath作用

主要是用于快速获取所需的节点对象。

)3 Dom4j中使用xPath技术

  1. 导入xPath支持jar包 。 jaxen-1.1-beta-6.jar
  2. 使用xpath方法
List<Node>  selectNodes("xpath表达式");   查询多个节点对象
Node   selectSingleNode("xpath表达式");  查询一个节点对象

)4 xPath语法

符号 意义 作用
/ 绝对路径 表示从xml的根位置开始或子元素(一个层次结构)
// 相对路径 表示不分任何层次结构的选择元素
* 通配符 表示匹配所有元素
[] 条件 表示选择什么条件下的元素
@ 属性 表示选择属性节点
and 关系 表示条件的与关系(等价于&&)
text() 文本 表示选择文本内容

@XML约束

)1 引入

规范的xml文件的基本编写规则。(由w3c组织制定的)

规范XML文件数据内容格式的编写规则。(由开发者自行定义)

)2 DTD

导入DTD的方式
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
]>

<!DOCTYPE note SYSTEM "note.dtd">

DTD语法
约束标签:

<!ELEMENT 元素名称 类别 或 <!ELEMENT 元素名称 (元素内容)>

标签 次数
必须且只出现1次
+ 至少出现1次
* 0或n次
0 或1次
约束属性:

<!ATTLIST 元素名称 属性名称 属性类型 默认值>

属性类型 表示
CDATA 表示普通字符串
(en1|en2|..) 表示一定是任选其中的一个值
ID 表示在一个xml文档中该属性值必须唯一,值不能以数字开头

)3 Schema

名称空间:

告诉xml文档的哪个元素被哪个schema文档约束。 在一个xml文档中,不同的标签可以受到不同的schema文档的约束。

  1. 一个名称空间受到schema文档约束的情况
  2. 多个名称空间受到多个schema文档约束的情况
  3. 默认名称空间的情况
  4. 没有名称空间的情况

By : vpt
Ps : 此文基于黑马培训笔记,用于之后回顾知识点以markdown形式整理而成。

上一篇下一篇

猜你喜欢

热点阅读