JAVA学习笔记_XML解析及XPath表达式

1.DOM解析:基于DOM模型解析xml文件。一次性把xml文件加载进内存,然后在内存中构建Document树。比较消耗内存,并不适合读取容量大的xml文件。
1)DOM解析的原理: 
xml解析引擎把一个xml文件一次性加载进内存,在内存中创建一颗document对象树。通过树上的对象获取或设置xml文件信息
2)基于dom解析原理工具
dom4j工具
3)dom4j使用方法(具体代码请另行百度)
查:
Document doc= new SAXReader().read("xml文件");
标签:
element("name")  查询第一个子标签
elements("name")  查询指定名称的所有子标签
elements()       查询所有子标签
属性:
attributeValue("name")  根据属性名获取属性值
attribute("name")  根据属性名获取属性对象
getName()  属性名   /  getValue()  属性值
   文本:
getText()    获取当前标签的文本内容
elementText("name")  获取子标签文本

增:
文档: DocumentHelper.createDocumnt();
标签:  addElement("name")   
属性:  addAttribute("name","value")
改:
属性值: setValue("修改值")  /  addAttribute("同名属性","修改值")
文本:  setText("文本")
删:
标签、属性: detach()   /    getParent().remove(标签/属性)
4) XPath
XPath表达式(重点)(具体参见w3c)
/   绝对路径    斜杠在最前面,代表xml文件的根。斜杠在中间,表示子元素。
//  相对路径    选择后代元素(不分层次结构)
*   通配 选择所有元素
[ ]   条件        选择什么条件下的元素。例如 /AAA/BBB[1] 选择第一个BBB子元素
@   属性         选取属性
=    内容 (值)  
and  逻辑与
text()   选取文本内容
XPath在dom4j中如何使用
1)在项目中导入xpath支持jar包。jaxen-1.1-beta-6.jar
2)使用dom4j提供的xpath方法
selectNodes(xpath表达式):  查询符合条件的多个节点对象 
selectSingleNode(xpath表达式)  查询符合条件的一个节点对象






2.SAX解析:基于SAX的原理解析xml文件。优势:内存占用非常小。加载一点,解析一点,处理一点,接着释放内存。
oracle-sun官方的API, 在jdk中,属于javase的规范。org.xml.sax.* 。并不需要导入包。



基于SAX解析读取xml文件
public class Demo1 {

public static void main(String[] args)throws Exception {
//1.创建SAXParser对象
SAXParser parser = SAXParserFactory.newInstance().newSAXParser();

//2.调用parse方法,读取和解析xml文件
/**
* 参数一: 指定的文件地址
*/
File file = new File("./src/contact.xml");
/**
* 参数二: 指定DefaultHandler的子类
*/
parser.parse(file, new MyDefaultHandler());
}


}


//事件处理程序:
package gz.itcast.b_sax;


import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
* 事件处理程序
* @author APPle
*/


public class MyDefaultHandler extends DefaultHandler {
/**
* 遇到文档开始
*/
@Override
public void startDocument() throws SAXException {
System.out.println("文档开始读取");
}

/**
* 遇到开始标签
* @param qName: 当前遇到的标签名称
*/
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
System.out.println("MyDefaultHandler.startElement()-->"+qName);
}

/**
* 遇到文本内容(包括空格换行)
* @param ch : 表示整个xml文档所有文本内容
* @param start: 表示当前读到的文本内容的开始位置
* @param length: 表示当前读到的文本内容的长度
*/
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
//得到当前读到的文本内容
String content = new String(ch,start,length);
System.out.println("MyDefaultHandler.characters()-->"+content);
}

/**
* 遇到结束标签
* @param qName: 表示当前读取的结束标签名称
*/
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println("MyDefaultHandler.endElement()-->"+qName);
}


/**
* 遇到结束文档时
*/
@Override
public void endDocument() throws SAXException {
System.out.println("文档读取完毕");
}

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值