本帖最后由 小石姐姐 于 2018-6-7 10:22 编辑
就业班_JavaEE_day12_XML
一 xml基础语法
标签必须有开始和结束,成对出现。
标签中的属性必须用引号
区分大小写
申明必须在首行首列 <?xml version="1.0" encoding="UTF-8"?>
以上语法与html都不同。
<!<CDATA[ 原样输出的内容 ]>>
<!-- 注释 -->
主要用于软件配置和数据交换
二 xml的二种解析方式: dom和sax
dom
定义 一次性加载到内存中,形成树形结构。
缺点 如果文件过大,可能造成内存溢出
优点 方便增删改
sax
定义 基于事件驱动、逐行解析。
缺点 不能实现增删改操作
优点 不会造成内存溢出; 方便查询操作。
三 xml主流解析技术 :dom4j + xpath
A 读取XML
1 创建解析器对象
SAXReader sr = new SAXReader();
2.得到document对象
Document document = sr.read(xml文件路径);
3 通过xpath选择节点
xpath表达式写法。 /A 第一层 //A 不分层级 /A[1] /A[last()] 得到第一个和最后一个
//A[@id] 得到有id属性的A标签
//A[@id='name'] 得到有ID属性并且值=name的A标签
List<Node> list = document.selectNodes();
Node node = document.selectSingleNode();
可以将node强制为Element
4 获取元素的text或者属性值
String element.getText();
String element.attributeValue(属性名)
B 修改并回写(在某个标签元素的末尾添加子元素)
1 创建解析器对象
SAXReader sr = new SAXReader();
2.得到document对象
Document document = sr.read(xml文件路径);
3 通过xpath选择父节点
4.在父节点的末尾添加子元素
addElement("标签名称") 返回一个Element
Element sex = 父节点.addElement("sex");
5.设置第4步得到的element的文本
setText("文本内容");
6. 将内存中的document对象回写到xml中。
XMLWriter writer = new XMLWriter(outputstream 回写文件位置 ,outputformat 文件格式);
outputformat类提供了二种文件格式,选择 createPrettyPrint() 带有缩进。
writer.write(document);
writer.close();
C修改并写回XML(不再末尾添加子元素)
1 创建解析器对象
SAXReader sr = new SAXReader();
2.得到document对象
Document document = sr.read(xml文件路径);
3 通过xpath选择父节点
4.需要通过DocumentHelper类来创建一个子元素
Element school = DocumentHelper.createElement("school");
5.设置第4步得到的element的文本
setText("文本内容");
6 得到父节点下的所有子元素
List<Element> list = 父节点.elements();
7 将子元素插入指定位置
list.add(index,子元素);
8. 将内存中的document对象回写到xml中。
XMLWriter writer = new XMLWriter(outputstream 回写文件位置 ,outputformat 文件格式);
outputformat类提供了二种文件格式,选择 createPrettyPrint() 带有缩进的。
writer.write(document);
writer.close();
四 xml约束
dtd和schema
二者区别
1.DTD语法是自成一体的.Schema语法就是XML的语法.
2.Schema的语法就是XML的语法所以更容易被解析器解析.
3.Schema支持名称空间.
4.Schema有比DTD更加强大的语义和语法的约束.
名称空间:
一个XML只能引入一个DTD约束文档.而使用Schema约束XML文档,一个XML可以引入多个Schema.
名称空间是为了解决多个schema中的同名冲突,类似于java中的package.通过名称空间区分 标签或属性来自于哪个文档的
|
|