三.javaweb笔记之xml解析
来源:互联网 发布:九十年代流行网络歌曲 编辑:程序博客网 时间:2024/06/14 09:05
xml解析
1、xml简介
什么是xml
eXtensible Markup Language可扩展标记语言——由W3C组织发布,目前推荐遵守的是W3C组织于2000年发布的XML1.0规范。
XML的使命,就是以一个统一的格式,组织有关系的数据,为不同平台下的应用程序服务。
<?xml version="1.0" encoding="utf-8"?>
<中国>
<北京>
<海淀></海淀>
<丰台></丰台>
</北京>
<湖南>
<长沙></长沙>
<岳阳></岳阳>
</湖南>
<湖北>
<武汉></武汉>
<荆州></荆州>
</湖北>
</中国>
<message>
<to>123456</to>
<from>china</from>
<content>
ddadsaadsads
</content>
</message>
我们不同的平台有他自己的数据格式,但是不同平台之间如果相互想传递数据,那么就应该用同一种数据格式,这样大家都能读懂。就像加入WTO组织的各个国家一样。每个国家都有自己的语言和货币,但是如果大家都用自己的东西就很难沟通和衡量。那么我们就使用统一的方式,使用英语作为交流语言,使用美元作为货币标准
主要用途
xml就是一种数据保存的格式而已。按照他的规则你就知道数据之间的关系。
xml经常用在下面的情况中
配置文件
JavaWeb 记不记得我们c3p0配置文件呢?
框架 我们以后学习的框架都要用
到很多配置文件
数据交换
Ajax
WebService
数据存储
保存关系型数据
为什么我们要使用xml保存数据呢?比如c3p0的配置文件。因为有些数据是不会经常变化的数据,我们需要固定的保存起来,然而这些数据又是有某些关系的。我们希望也把他们直接的关系用简明易懂的格式保存起来,方便后来查看这些数据的时候一下就能看懂他们直接的关系。
2、xml规范
xml文档结构
文档声明
①在编写XML文档时,必须在文件的第一行书写文档声明。
最简单的声明语法:<?xml version="1.0" ?>
②用encoding属性说明读取文档所用的解码的字符集:
<?xml version="1.0" encoding="utf-8" ?>
这样就要求保存文件时,必须用utf-8编码保存。此时要求XML文档的作者确认当前编辑器保存文档的编码方式。
eclipse会自动按照解码字符集进行编码保存
记事本需要另存为指定的字符集
语法规则
- 第一行必须为xml声明,顶格写.可以写,一但写就必须放在第一行,顶格写
- 只能有一个根标签
- 标签必须正确结束,并不能交叉嵌套
- 严格区分大小,标签不能以数字开头
- 属性必须有值,且必须加双引号。
有属性就必须有值。
xml转义字符
特殊字符替代符号<<>>&&“"‘'XML实体中不允许出现"&","<",">"等特殊字符,否则XML语法检查时将出错,如果编写的XML文件必须包含这些字符,则必须分别写成"&","<",">"再写入文件中。例如,如果在XML文档中使用类似"<" 的字符, 那么解析器将会出现错误,因为解析器会认为这是一个新元素的开始。所以不应该像下面那样书写代码:
- <age> age < 30 </age>
- 这种写法会解析出现错误,因为<,>等等都是关键字符,除过标签以外,不允许占用的。
- <age> age < 30 </age>
CDATA区
①当XML文档中需要写一些程序代码、SQL语句或其他不希望XML解析器进行解析的内容时,就可以写在CDATA区中
②XML解析器会将CDATA区中的内容原封不动的输出
③CDATA区的定义格式:<![CDATA[…]]>
例如:
注释
①Xml文件中的注释采用:“<!--注释-->” 格式。
注意:
·XML声明之前不能有注释
·注释不能嵌套
处理指令
①处理指令,简称PI (processing instruction)。处理指令用来指挥解析引擎如何解析XML文档内容。
②处理指令必须以“<?”作为开头,以“?>”作为结尾,XML声明语句就是最常见的一种处理指令。
例如,在XML文档中可以使用xml-stylesheet指令,通知XML解析引擎,应用xsl文件显示xml文档内容。
<?xml-stylesheet type="text/css" href="p.xsl"?>
文件样式文件XmlXslHtmlCss3、xml解析
解析方式
- dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式。
它下面有两个分支:jDom与dom4j
它们可都可以对xml文件进行增删改查的操作
- sax: (Simple API for XML) 不是官方标准,但它是 XML 社区事实上的标准,几乎所有的 XML 解析器都支持它。
只能进行解析(查询)
- pull: Pull解析和Sax解析很相似,都是轻量级的解析,它是一个第三方开源的Java项目,但在Android的内核中已经嵌入了Pull 。
只能进行解析(查询)
解析技术体系
4、dom4j解析
简介
- Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。
- Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate。使用Dom4j开发,需下载dom4j相应的jar文件。
使用
dom4j解析xml文件主要有以下几个步骤:
0、导包,导包,导包,重要的事情说三遍!dom4j-1.6.1.jar
1、创建解析器,获取要解析的xml的文档对象,即document对象。
2、获取元素,进行操作。可操作属性,操作文本,获取元素信息等
3、如果document对象有改变。那么保存document对象为xml文件
代码示例:
//1、创建saxreader对象
SAXReader reader = new SAXReader();
//2、读取xml文件,获得document对象
Document document = reader.read(new FileInputStream("web.xml"));
//3、获取到根元素,从根元素开始查找,修改
Element element = document.getRootElement();
//4、遍历所有元素
Iterator iterator = element.elementIterator();
while(iterator.hasNext()){
Element next = (Element) iterator.next();
System.out.println(next.getName()+"-->"+next.getText());
}
//5、获取element下的第一个子元素
/**
* 查询都是使用根元素的element往下开始查询,一层一层的查
* 各种元素查询的方法:
* //获取某个元素的指定名称的第一个子节点
* Element element = element.element(“书名");
* //获取某个元素的指定名称的所有子元素的集合
* List list = element.elements(“书名”);
* //添加一个指定名称的子元素
* Element childEle = parentEle.addElement(“书名”);
* //删除某个元素指定的子元素
* parentEle.remove(childEle);
*/
Element element2 = element.element("servlet");
Element element3 = element2.element("servlet-name");
System.out.println(element3.getStringValue());
//6、元素的操作
/**
* 1、属性操作
* //获取某个元素的指定名称的属性对象
* Attribute attr = element.attribute(“id”);
* //获取某个元素的指定名称的属性值
* String id = element.attributeValue(“id”);
* //给元素添加属性或更新其值
* Attribute attr = element.addAttribute(“id”,”123”);
* //删除某个元素的指定属性
* element.remove(attribute);
*
* 2、文本操作
* //获取某个元素的文本内容
* String text = element.getText();
* //给某个元素添加或更新文本内容
* element.setText(“Tom”);
*/
//7、保存document到xml
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileOutputStream( "output.xml" ),format);
writer.write(document);
writer.close();
5、xpath
简介
XPath 是在 XML 文档中查找信息的语言 ,xpath类似与jquery选择器
XPath 是通过元素和属性进行查找
XPath简化了Dom4j查找节点的过程
使用XPath必须导入jaxen-1.1-beta-6.jar
否则出现
NoClassDefFoundError: org/jaxen/JaxenException
语法
XPath语法示例
/students/student从根元素开始逐层找,以”/”开头//name直接获取所有name元素对象,以“//”开头//student/*获取所有student元素的所有子元素对象//student[1]或//student[last()]获取所有student元素的第一个或最后一个//student[@id]获取所有带id属性的student元素对象//student[@id=‘002']获取id等于002的student元素对象使用
0、导包,导包,导包。谢谢。jaxen-1.1-beta-6.jar
1、dom4j怎么做就怎么做。只是在查找元素的时候可以使用xpath了
2、获取所有符合条件的节点
- document.selectNodes(String xpathExpression) 返回List集合
获取符合条件的单个节点
- document.selectSingleNode(String xpathExpression)
返回一个Node对象。如果符合条件的节点有多个,那么返回第一个。
代码:
public void testXpath() throws Exception{
SAXReader reader = new SAXReader();
Document document = reader.read("stu.xml");
//我们使用selectNodes 或 selectSingleNode
//查询id为2的学生
Element stuEle = (Element) document.selectSingleNode("/students/student[@id='2']");
//获取学生的信息
String idStr = stuEle.attributeValue("id");
String name = stuEle.elementText("name");
String ageStr = stuEle.elementText("age");
String gender = stuEle.elementText("gender");
String address = stuEle.elementText("address");
//封装为一个学生对象
Student stu = new Student(Integer.parseInt(idStr), name, Integer.parseInt(ageStr), gender, address);
System.out.println(stu);
}
0 0
- 三.javaweb笔记之xml解析
- JavaWeb笔记之XML解析
- JavaWeb学习笔记之xml解析
- javaWeb之XML解析
- javaweb学习笔记(三)-xml解析初识及dom4j的基本应用
- 学习笔记之XML的三种l解析方法
- JavaWeb学习笔记之xml&DTD&schema
- xml 笔记三 XML 解析器
- JavaWeb-XML解析
- JavaWeb - XML解析 - DOM
- JavaWeb - XML解析 - SAX
- JavaWeb - XML解析 - JDOM
- JavaWeb - XML解析 - DOM4J
- Javaweb Dom4j解析XMl
- XML解析之三 Dom解析器
- JavaWeb学习笔记(4)--XML解析技术
- JavaWeb学习笔记(四)---XML技术之XML语法
- javaweb-xml解析&json解析
- 一.javaweb笔记之javaScript简介+基本语法+事件驱动+DOM
- 二.javaweb笔记之JQuery学习路线+语法+常用选择器
- Github全面详解-06创建代码仓库
- 没有任何类型 Test1 的外层实例可访问。必须用类型 Test1 的外层实例(例如,x.new A(),其中 x 是 Test1 的实例)来限定分配。
- The reference to entity "characterEncoding" must end with the ';' delimiter
- 三.javaweb笔记之xml解析
- 四.javaweb之web环境的搭建
- [组合数取模] BZOJ 4830 [Hnoi2017]抛硬币
- The prefix "tx" for element "tx:annotation-driven " is not bound The prefix "tx" for element "tx:ann
- 记CentOs服务器内存使用满的解决办法
- 五.javaweb之Http协议
- IMWeb训练营作业----todo list
- EF
- XMinCMSEntities