读取xml的五种方法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
123 * @param qName 原始名,如LIT:student
124 * @throws SAXException */
125 public void endElement(String namespaceURI, String localName,String qName) throws SAXException{
28 System.exit(1);
29 }
30 //获得根节点StuInfo
31 Element elmtStuInfo = doc.getDocumentElement();
32 //得到所有student节点
33 NodeList nlStudent = elmtStuInfo.getElementsByTagNameNS(
23 } catch (DOMException dom) {
24Message());
25 System.exit(1);
26 } catch (IOException ioe) {
27 System.err.println(ioe);
在java环境下读取xml文件的方法主要有5种:DOM、SAX、JDOM、JAXB、dom4j
最常用、最好用的dom4j
1. DOM(Document Object Model)
此 方法主要由W3C提供,它将xml文件全部读入内存中,然后将各个元素组成一棵数据树,以便快速的访问各个节点 。 因此非常消耗系统性能 ,对比较大的文档不适宜采用DOM方法来解析。 DOM API 直接沿袭了 XML 规范。每个结点都可以扩展的基于 Node 的接口,就多态性的观点来讲,它是优秀的,但是在 Java 语言中的应用不方便,并且可读性不强。
34 strNamespace, "student");
35 for (……){
36 //当前student节点元素
37 Element elmtStudent = (Element)nlStudent.item(i);
59 root.appendChild(student);
60 //建立"姓名"元素,添加到学生下面,下同
61 Element name = doc.createElement("姓名");
62 student.appendChild(name);
63 Text tName = doc.createTextNode(studentBean.getName());
11 factory.setValidating(true);
12 //获得DocumentBuilder的一个实例
13 try {
14 DocumentBuilder builder = factory.newDocumentBuilder();
15 } catch (ParserConfigurationException pce) {
85 }
86 /**
87 * 在解析整个文档结束时调用
88 * @throws SAXException
89 */
90 public void endDocument() throws SAXException{
91 System.out.println("**** Student information end ****");
118 , String qName, Attributes atts) throws SAXException{
119 }
120 /** 在解析元素结束时调用
121 * @param namespaceURI
122 * @param localName 本地名,如student
43 try {
44 builder = factory .newDocumentBuilder();
45 } catch (ParserConfigurationException pce) {
46 System.err.println(pce);
47 System.exit(1);
6 //写XML文件要用到
7 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
8 //允许名字空间
9 factory.setNamespaceAware(true);
10 //允许验证
对于读取得方法其实是很简单的,写入xml文件也是一样不复杂。
Java代码
41 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
42 DocumentBuilder builder = null;
71 … …
72 }
73 /**
74 * 当其他某一个调用事件发生时,先调用此方法来在文档中定位。
75 * @param locator
76 */
77 public void setDocumentLocator(Locator locator){
取得元素数据中的空白的方法——ignorableWhitespace
在解析到处理指令时调用的方法——processingInstruction
当未验证解析器忽略实体时调用的方法——skippedEntity
运行时,只需要使用下列代码:
112 * @param localName
113 * @param qName
114 * @param atts
115 * @throws SAXException
116 */
117 public void startElement(String namespaceURI, String localName
126 if (localName.equals(“student”)){
127 System.out.println(localName+":"+currentData);
128 }
129 }
取得元素数据的方法——characters
48 }
49 Document doc = null;
50 doc = builder .newDocument();
51 //下面是建立XML文档内容的过程,
52 //先建立根元素"学生花名册"
53 Element root = doc.createElement("学生花名册");
使用必须扩展ContentHandler、ErrorHandler、DTDHandler等,但是必须扩展ContentHandler(或者DefaultHandler )。
Java代码
69 import org.xml.sax.*;
70 public class MyContentHandler implements ContentHandler {
实例:
Java代码
1 import javax.xml.parsers.*;
2 //XML解析器接口
3 import org.w3c.dom.*;
4 //XML的DOM实现
5 import org.apache.crimson.tree.XmlDocument;
64 name.appendChild(tName);
65 Element age = doc.createElement("年龄");
66 student.appendChild(age);
67 Text tAge = doc.createTextNode(String.valueOf(studentBean.getAge()));
16 System.err.println(pce);
17 // 出异常时输出异常信息,然后退出,下同
18 System.exit(1);
19 }
20 //解析文档,并获得一个Document实例。
21 try {
22 Document doc = builder.parse(fileURI);
54 //根元素添加上文档
55 doc.appendChild(root);
56 //建立"学生"元素,添加到根元素
57 Element student = doc.createElement("学生");
58 student.setAttribute("性别", studentBean.getSex());
68 age.appendChild(tAge);
2.SAX (Simple API for XML)
此方法主要由XML-DEV 邮件列表的成员开发的,SAX是基于事件的方法,它很类似于标签库的处理机制,在标签开始、结束以及错误发生等等地方调用相应的接口实现方法,不是全部文 档都读入内存。 SAX具有优异的性能和利用更少的存储空间特点。SAX 的设计只考虑了功能的强大性,却没有考虑程序员使用起来是否方便。
106 */
107 public void endPrefixMapping(String prefix) throws SAXException{
108 }
109 /**
110 * 在解析元素开始时调用
111 * @param namespaceURI
78 }
79 /**
80 * 在解析整个文档开始时调用
81 * @throws SAXException
82 */
83 public void startDocument() throws SAXException{
84 System.out.println("** Student information start **");
92 }
93 /**
94 * 在解析名字空间开始时调用
95 * @param prefix
96 * @param uri
97 * @throws SAXException
98 */
99 public void startPrefixMapping(String prefix
100 , String uri) throws SAXException{
101 }
102 /**
103 * 在解析名字空间结束时调用
104 * @param prefix
105 * @throws SAXException
38 NodeList nlCurrent = elmtStudent.getElementsByTagNameNS(
39 strNamespace, "name");
40 }
124 * @throws SAXException */
125 public void endElement(String namespaceURI, String localName,String qName) throws SAXException{
28 System.exit(1);
29 }
30 //获得根节点StuInfo
31 Element elmtStuInfo = doc.getDocumentElement();
32 //得到所有student节点
33 NodeList nlStudent = elmtStuInfo.getElementsByTagNameNS(
23 } catch (DOMException dom) {
24Message());
25 System.exit(1);
26 } catch (IOException ioe) {
27 System.err.println(ioe);
在java环境下读取xml文件的方法主要有5种:DOM、SAX、JDOM、JAXB、dom4j
最常用、最好用的dom4j
1. DOM(Document Object Model)
此 方法主要由W3C提供,它将xml文件全部读入内存中,然后将各个元素组成一棵数据树,以便快速的访问各个节点 。 因此非常消耗系统性能 ,对比较大的文档不适宜采用DOM方法来解析。 DOM API 直接沿袭了 XML 规范。每个结点都可以扩展的基于 Node 的接口,就多态性的观点来讲,它是优秀的,但是在 Java 语言中的应用不方便,并且可读性不强。
34 strNamespace, "student");
35 for (……){
36 //当前student节点元素
37 Element elmtStudent = (Element)nlStudent.item(i);
59 root.appendChild(student);
60 //建立"姓名"元素,添加到学生下面,下同
61 Element name = doc.createElement("姓名");
62 student.appendChild(name);
63 Text tName = doc.createTextNode(studentBean.getName());
11 factory.setValidating(true);
12 //获得DocumentBuilder的一个实例
13 try {
14 DocumentBuilder builder = factory.newDocumentBuilder();
15 } catch (ParserConfigurationException pce) {
85 }
86 /**
87 * 在解析整个文档结束时调用
88 * @throws SAXException
89 */
90 public void endDocument() throws SAXException{
91 System.out.println("**** Student information end ****");
118 , String qName, Attributes atts) throws SAXException{
119 }
120 /** 在解析元素结束时调用
121 * @param namespaceURI
122 * @param localName 本地名,如student
43 try {
44 builder = factory .newDocumentBuilder();
45 } catch (ParserConfigurationException pce) {
46 System.err.println(pce);
47 System.exit(1);
6 //写XML文件要用到
7 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
8 //允许名字空间
9 factory.setNamespaceAware(true);
10 //允许验证
对于读取得方法其实是很简单的,写入xml文件也是一样不复杂。
Java代码
41 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
42 DocumentBuilder builder = null;
71 … …
72 }
73 /**
74 * 当其他某一个调用事件发生时,先调用此方法来在文档中定位。
75 * @param locator
76 */
77 public void setDocumentLocator(Locator locator){
取得元素数据中的空白的方法——ignorableWhitespace
在解析到处理指令时调用的方法——processingInstruction
当未验证解析器忽略实体时调用的方法——skippedEntity
运行时,只需要使用下列代码:
112 * @param localName
113 * @param qName
114 * @param atts
115 * @throws SAXException
116 */
117 public void startElement(String namespaceURI, String localName
126 if (localName.equals(“student”)){
127 System.out.println(localName+":"+currentData);
128 }
129 }
取得元素数据的方法——characters
48 }
49 Document doc = null;
50 doc = builder .newDocument();
51 //下面是建立XML文档内容的过程,
52 //先建立根元素"学生花名册"
53 Element root = doc.createElement("学生花名册");
使用必须扩展ContentHandler、ErrorHandler、DTDHandler等,但是必须扩展ContentHandler(或者DefaultHandler )。
Java代码
69 import org.xml.sax.*;
70 public class MyContentHandler implements ContentHandler {
实例:
Java代码
1 import javax.xml.parsers.*;
2 //XML解析器接口
3 import org.w3c.dom.*;
4 //XML的DOM实现
5 import org.apache.crimson.tree.XmlDocument;
64 name.appendChild(tName);
65 Element age = doc.createElement("年龄");
66 student.appendChild(age);
67 Text tAge = doc.createTextNode(String.valueOf(studentBean.getAge()));
16 System.err.println(pce);
17 // 出异常时输出异常信息,然后退出,下同
18 System.exit(1);
19 }
20 //解析文档,并获得一个Document实例。
21 try {
22 Document doc = builder.parse(fileURI);
54 //根元素添加上文档
55 doc.appendChild(root);
56 //建立"学生"元素,添加到根元素
57 Element student = doc.createElement("学生");
58 student.setAttribute("性别", studentBean.getSex());
68 age.appendChild(tAge);
2.SAX (Simple API for XML)
此方法主要由XML-DEV 邮件列表的成员开发的,SAX是基于事件的方法,它很类似于标签库的处理机制,在标签开始、结束以及错误发生等等地方调用相应的接口实现方法,不是全部文 档都读入内存。 SAX具有优异的性能和利用更少的存储空间特点。SAX 的设计只考虑了功能的强大性,却没有考虑程序员使用起来是否方便。
106 */
107 public void endPrefixMapping(String prefix) throws SAXException{
108 }
109 /**
110 * 在解析元素开始时调用
111 * @param namespaceURI
78 }
79 /**
80 * 在解析整个文档开始时调用
81 * @throws SAXException
82 */
83 public void startDocument() throws SAXException{
84 System.out.println("** Student information start **");
92 }
93 /**
94 * 在解析名字空间开始时调用
95 * @param prefix
96 * @param uri
97 * @throws SAXException
98 */
99 public void startPrefixMapping(String prefix
100 , String uri) throws SAXException{
101 }
102 /**
103 * 在解析名字空间结束时调用
104 * @param prefix
105 * @throws SAXException
38 NodeList nlCurrent = elmtStudent.getElementsByTagNameNS(
39 strNamespace, "name");
40 }