XML与java的应用
对于XML进行解析,我们需要调用第三方提供的接口,对XML文档进行解析;
对于XML处理方面,W3C有两种解决方法:
(1)DOM(Document Object Model):
(2)SAX(Simple API for XML)
DOM介绍:
特点:先将xml文档解析成dom树,并放入内存,能够随机访问任意节点。
缺点:因为需要放入内存操作,所以对文件大小有限制。
DOM位于org.w3c.dom包中。
一、3个核心的接口:
(1)Document:是整个文档的根结点。只有取得了Document结点,才能够对文档操作。
常用方法:
(1)Element elem = document.createElement("elem"); //创建一个结点
(2)Attribute attr = document.createAttribute("attr"); // 创建一个属性
(3)Text t = document.createTextNode("text"); //创建一个文本节点
(4)NodeList list = document.getElementsByTagName("..."); //寻找某个结点
(2)Node:DOM树是由结点组成,因此结点是很重要的。
常用方法:
(1)appendChild(Node child); //添加子节点
(2)getFirstChild(); //获得第一个子节点
(3)getNodeValue(); //得到节点的值
(4)hasChildNodes(); //是否还有子节点
(3)NodeList:是由Node组成的一个List。
常用方法:
(1)Node item(int x); //获得第几个节点
(2)getLength(); // 获得list的长度
如果要获得Document对象,需要:
------------------------------------------------------------
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse("....");获得doc |
------------------------------------------------------------
生成xml文件方法:需要TransformerFactory,Transformer,StreamResult,DOMSource。
方法:
Document doc = builder.newDocument(); 生成DOM树 StreamResult result = new StreamResult(new File("...")); DOMSource source = new DOMSource(doc); TransformerFactory factory = TransformerFactory.newInstance(); Transformer t = factory.newTransformer(); t.transform(source,result);即可 |
<?xml version="1.0" encoding="GBK"?>
<persons><person><name>xiazdong</name><age>20</age><school>ecnu</school></person><person><name>xzdong</name><age>15</age><school>nanyang</school></person>
</persons>
读取文档信息:
import org.w3c.dom.*;
import javax.xml.parsers.*;
public class DOMDemo01{public static void main(String args[])throws Exception{DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document doc = builder.parse("demo.xml");NodeList plist = doc.getElementsByTagName("person");for(int i=0;i<plist.getLength();i++){Element elem = (Element)plist.item(i);System.out.println("姓名:"+elem.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());System.out.println("年龄:"+elem.getElementsByTagName("age").item(0).getFirstChild().getNodeValue());System.out.println("学校:"+elem.getElementsByTagName("school").item(0).getFirstChild().getNodeValue());}}
}
生成XML文档:
import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import java.io.*;
public class DOMDemo02{public static void main(String args[])throws Exception{DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document doc = builder.newDocument();Element person = doc.createElement("person");Element age = doc.createElement("age");Element name = doc.createElement("name");Text xiazdong = doc.createTextNode("xiazdong");Text ageText = doc.createTextNode("15");age.appendChild(ageText);name.appendChild(xiazdong);person.appendChild(name);person.appendChild(age);doc.appendChild(person);DOMSource source = new DOMSource(doc);TransformerFactory tf = TransformerFactory.newInstance();Transformer t = tf.newTransformer();StreamResult result = new StreamResult(new File("output.xml"));t.transform(source,result);}
}
生成后xml文档结构:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<person><name>xiazdong</name><age>15</age>
</person>
SAX介绍:
只能读取,不能生成或改变,并且只能遍历。
缺点:只能读取。
SAX的主要方法有5个:
(1)public void startDocument()throws SAXException;
(2)public void endDocument()throws SAXException;
(3)public void startElement(String uri,String localname,String name,Attribute attr)throws SAXException;
(4)public void endElement(String uri,String localname,String name)throws SAXException;
(5)public void characters(char[]ch , int start,int length)throws SAXException;
SAX属于触发类型的,当遇到文档开头就触发(1)方法,遇到元素的开头触发(3)方法;
因此如果我们需要使用SAX,必须要自己实现一个SAX解析器;
注意:解析器必须继承DefaultHandler;
实现完解析器后,则可以做操作:
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
parser.parse("文件路径",new MySAXParser());
即可;
XML解析工具:
(1)DOM4J
DOM4J是一个XML操作的包,为了提供给用户更简便的操作XML。
以下是生成一个XML文件的代码:
Document doc = DocumentHelper.createDocument(); Element name = doc.addElement("name"); Element first = name.addElement("firstname"); Element second = name.addElement("secondname"); first.setText("xia"); second.setText("second"); OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("gb2312"); XMLWriter writer = new XMLWriter(new FileOutputStream("out.xml"),format); writer.write(doc); writer.close(); |
以下是读取一个XML文件的代码:
SAXReader reader = new SAXReader(); Document doc = reader.read(new File("out.xml")); Element root = doc.getRootElement(); Iterator iter = root.elementIterator(); Element elem = (Element)iter.next(); String str = elem.elementText("first"); |
(2)JDOM:也是一个非常好的解析工具,但是性能上比DOM4J差了不少,所以不用。
Javascript中运用DOM:把html想象成一个DOM树。
这里通过id进行查找。
var elem = document.getElementById("id");
elem.innerHTML
生成一个<input type = "button" value = "button"/>过程:
var form = document.getElementById("form"); //获得表单节点 Element button = document.createElement("input"); //创建一个节点 button.setAttribute("type","button"); //设置属性 button.setAttribute("value","button"); //设置属性 form.appendChild(button); //添加form的子节点 |
转载于:https://www.cnblogs.com/xiazdong/archive/2011/10/03/3058366.html
XML与java的应用相关推荐
- 用 XStream 序列化/反序列化 XML 为 Java 对象(实例)
用 XStream 序列化/反序列化 XML 为 Java 对象(实例) Posted on 2007-06-05 19:06 Stephen Wong 阅读(1224) 评论(0) 编辑 收藏 网 ...
- Java 中的 XML:Java 文档模型的用法
Java 中的 XML:Java 文档模型的用法 英文原文 内容: 代码对比 DOM JDOM dom4j Electric XML XPP 结束语 下一次... 参考资料 关于作者 对本文的评价 相 ...
- xml与java代码相互装换的工具类
2019独角兽企业重金招聘Python工程师标准>>> 这是一个java操作xml文件的工具类,最大的亮点在于能够通过工具类直接生成xml同样层次结构的java代码,也就是说,只要你 ...
- 使用xml及java代码混合的方式来设置图形界面
参考<疯狂android讲义>第2版2.1节 设置android的图形界面有三种方法: 1.使用纯xml文件 2.使用纯java,代码臃肿复杂,不建议使用 3.使用xml与java混合,前 ...
- xml与java对象转换 -- XStreamAlias
@XStreamAlias使用 一. 特点: 简化的API; 无映射文件; 高性能,低内存占用; 整洁的XML; 不需要修改对象;支持内部私有字段,不需要setter/getter方法 提供 ...
- 使用UltraEdit32编辑器格式化源码功能 XML、Java、C/C++、C#
From: http://www.cnblogs.com/zcy_soft/archive/2011/01/18/1938509.html UE编辑器一直是我编程和编辑文本的好帮手,对它映像最深刻的功 ...
- java xml amp_Javaamp;Xml教程(十一)JAXB实现XML与Java对象转换
JAXB是Java Architecture for XML Binding的缩写,用于在Java类与XML之间建立映射,可以帮助开发人员非常方便的將XML和Java对象进行相互转换. 本文以一个简单 ...
- 读取、回收和重用:使用 Excel、XML 和 Java 技术轻松搞定报告,第 2 部分
本周您推脱老板的 #432 创新理由了吗?您是否尝试过推脱? 本系列的其他文章 读取.回收和重用:使用 Excel.XML 和 Java 技术轻松搞定报告,第 1 部分 有幸的是,您不必推脱.本系列的 ...
- Xsd文件验证xml的java实现
xsd文件验证xml的java实现 今天在修改数据交换平台时候,看见其中使用此技术 import java.io.File; import java.io.IOException; import ja ...
- 使用castor实现xml和java对象的转换
对于xml和java对象的转换这里用castor进行转换,当然还有别的方式 方式一:castor和xml映射文件配合 首先提供需要解析的XML(内容不重要,重要的是格式) <?xml versi ...
最新文章
- mobsdk线上崩溃事故报告_重大事故!IO问题引发线上20台机器同时崩溃
- c++ 将引用赋值给引用_5分钟掌握 Python 对象的引用
- 关于卷积神经网络可视化的一点心得
- 这个SSRF 漏洞很酷
- AngularJS控制器中的#39;this#39;与$ scope
- 几个好用的资源下载网址
- Alexa世界排名作弊分析
- 这些中国顶级黑客带来的价值远比负面影响多!
- 论文解读 - 城市自动驾驶车辆运动规划与控制技术综述 (第1部分)
- 五大领域总目标指南_幼儿园五大领域活动总目标
- windows下kafka环境完整搭建,Python调用kafka构建完整实例分析与应用
- SDUTOJ(2109)找女朋友
- 应聘中巧用积极的心理暗示
- 方舟原始恐惧mod生物代码_《方舟:恐惧进化4》登场,各种幽灵生物你成功驯服了吗?...
- 反编译打包apk后无法安装正版apk提示:Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]
- outlook邮件服务器保存设置,邮件Outlook设置本地存储的方法--
- 机器学习新-统计机器学习第二版
- ora-19510/ora-27037
- PCB线路板中,有铅喷锡和无铅喷锡应如何选择?2021-11-16
- Git码云项目开发中常用分支
热门文章
- ES6——Symbol
- LeetCode(617)——合并二叉树(JavaScript)
- LeetCode(237)——删除链表中的节点(JavaScript)
- Error:npm WARN enoent ENOENT: no such file or directory, open ‘C:\Users\XX\package.json‘son‘
- 比较默认对象和默认约束的异同_UE4对象类类型引用和类默认对象(Class Default Object,简称CDO)...
- 现在很多人到农村买桑叶来吃,桑叶真的可以吃吗?
- 【小姨子】 基本信息(拼音,读音等)
- V商变现的逻辑和自媒体变现的逻辑
- 想建出优质的社群,必须懂得社群的本质
- 创业失败感悟第二十九天