XML简介
XML
指可扩展标记语言,也是一种标记语言。类似于HML,但是比HTML更加严格。
XML作用
- 作为软件配置文件
- 作为一种小型的”数据库”
XML语法
语法比HTML更加严格。
标签:
标签名不能以数字开头,中间不能有空格,区分大小写。有且仅有一个根标签。
属性:
可有多个属性,但属性值必须用引号(单引号或双引号)包含,但不能省略,也不能单 双混用。
文档声明:
<?xml version="1.0" encoding="utf-8"?>
encoding="utf-8"
: 打开或解析xml文档时的编码
注意:
保存xml文档时的编码 和 解析xml文档时的编码要保持一致,才能避免中文乱码问题!
XML解析
程序读取或操作XML文档。
两种解析方式:
DOM解析
一次性把XML
文档加载成Document树,通过Document对象得到节点对象,通过节点对象访问xml文档内容包括(标签,属性,文本,注释)SAX解析
DOM解析
工具:Dom4j
读取API:
读取xml文档:
Document doc = new SAXReader().read("xml文件");
节点:
nodeIterator(); 所有节点
标签:
element("名称") 指定名称的第一个子标签对象
elementIterator("名称"); 指定名称的所有子标签对象
elements(); 所有子标签对象
属性:
attributeValue(“名称”) 指定名称的属性值
attribute("名称") 指定名称的属性对象
getName() 属性名称
getValue() 属性值
atributeIterator() 所有属性对象(Iterator)
attributes() 所有属性对象(List)
文本:
getText() 得到当前标签的文本
elementText("子标签名称") 得到子标签的文本
修改API:
增加:
DocumentHelper.createDocument() 增加文档
addElement("名称") 增加标签
addAttribute("名称",“值”) 增加属性
修改:
Attribute.setValue("值") 修改属性值
Element.addAtribute("同名的属性名","值") 修改同名的属性值
Element.setText("内容") 修改文本内容
删除:
Element.detach(); 删除标签
Attribute.detach(); 删除属性
在dom4j中使用xPath技术
当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦。
Xpath作用:主要是用于快速获取所需的节点对象。
- 导入xPath支持jar包
jaxen-1.1-beta-6.jar
- 使用xpath方法
- List selectNodes(“xpath表达式”); 查询多个节点对象
- Node selectSingleNode(“xpath表达式”); 查询一个节点对象
SAX解析
原理:加载一点,读取一点,处理一点。对内存要求比较低。
SAX解析工具
该工具由Sun公司提供的,内置在JDK中。org.xml.sax.*
核心API:
SAXParser类
:用于读取和解析XML文件对象。
parse(File f, DefaultHandler dh)
方法: 解析xml文件
- 参数一: File:表示 读取的xml文件。
- 参数二: DefaultHandler: SAX事件处理程序。使用DefaultHandler的子类
例如:{
1.创建SAXParser对象
SAXParser parser=SAXParserFactory.newInstance().newSAXParser();
2.调用parse方法
parser.parse(new File("./src/contact.xml"), new MyDefaultHandler());
}
[一个类继承class 类名(extends DefaultHandler) 在调用是创建传进去
DefaultHandler类的API:
void startDocument() : 在读到文档开始时调用
void endDocument() :在读到文档结束时调用
void startElement(String uri, String localName, String qName, Attributes attributes) :读到开始标签时调用
void endElement(String uri, String localName, String qName) :读到结束标签时调用
void characters(char[] ch, int start, int length) : 读到文本内容时调用