XML学习总结及实践
- 存储和传输数据
- 作为框架的配置文件
- 使用xml存储和传输数据
- 通过程序生成xml
- 读取xml中的数据--xml解析
- xml解析思想
- Dom解析
- Document Object Model--文档对象模型
- 解析思想:将整个xml加载内存中,形成文档对象,所有对xml的操作都是对内存中document对象操作
- DOM是官方xml解析标准
- 所有开发语言都支持
- SAX解析
- Simlple API for XML xml简单API
- 来自开源社区引文当xml文档非常大, 不可能将xml数据加载到内存中
- 解析思想:一边解析,一边处理,一边释放内存资源
- STAX解析
- The Stream API for XML --XML流API
- STAX是一种拉模式xml解析方式,SAX是一种推模式xml解析方式
- 推push模式,由服务器为主导,向客户端主动发送数据
- 拉pull模式:由客户端为主导,主动向服务器申请数据
- XML解析开发包
- JAXP:Sun官方推出,同时支持以上三种解析方式
- DOM4j:开源框架:支持DOM、Sax、JAXP
- xml Pull: Android移动设备内置xml解析技术,支持Staxt解析
- DOM和Sax/STAX的区别
- XML文档比较复杂,或者随机处理文档中的数据时不建议使用dom4j
- 相对于DoM,sax和stax是一种更轻量级的方案,内存开销小
- 但是sax/stax的编程较为复杂,而且无法在读取过程中修改xml数据
- 当sax和stax读取xml数据时,如果读取到内存的数据不释放,内存中将存在整个xml文档数据,这样类似DOM,就可以进行修改和回写
- 开发中如何选择解析
- 如果必须对数据进行更改,并且作为xml将其输出,多数情况下采用dom
- 其他情况使用sax、stax
- Dom解析
DOM4J解析
- 主页:【dom4j】https://github.com/dom4j/dom4j
- 添加依赖dom4j.jar
- 要解析的文档
<?xml version="1.0" encoding="UTF-8"?> <struts> <action name="login" class="com.coderising.action.LoginAction"> <result name="success">/jsp/homepage.jsp</result> <result name="fail">/jsp/showLogin.jsp</result> </action> <action name="logout" class="com.coderising.action.LogoutAction"> <result name="success">/jsp/welcome.jsp</result> <result name="error">/jsp/error.jsp</result> </action> </struts>
4.获取所有的节点名称
//1.创建一个解析对象 saxReader SAXReader saxReader = new SAXReader();try {
//2. 读取配置文件structs.xml Document read = saxReader.read(new File("src/com/coderising/action/struts.xml")); //3 获得根节点(struts根节点) Element rootElement = read.getRootElement(); //4.获得根节点下的一级节点 (action 节点) List<Element> elements = rootElement.elements(); for (Element element : elements) {
//5 获取name的属性 Attribute attribute = element.attribute("name"); //6 如果等于传递进来的actionName if(attribute.getValue().equals(actionName)){//获得属性值
//进行下一步操作。。。。
} }