- 浏览: 74626 次
- 性别:
- 来自: 大连
最新评论
-
Heart.X.Raid:
//非递归后序遍历二叉树
void aftorder_t ...
树的遍历 -
zhangjunji111:
airlink 写道建议你再加个0来循环。
我的测试结果是10 ...
Spring的获取Bean的性能测试。 -
airlink:
建议你再加个0来循环。我的测试结果是10倍以上的差距。spri ...
Spring的获取Bean的性能测试。 -
rmn190:
结果中哪一个是C++的,哪一个Java的呢? 楼主最好用一个t ...
简单的c++排序跟java的性能比较。仅仅学习。 -
moshalanye:
每个对象都有一个隐含锁静态对象属于Class对象,非晶态对象属 ...
Java里面的同步跟oracle的锁的联想
基于dom方式的dom4j和jdom以及JDK提供的dom方式,都是基于树形结构把xml文本数据读入内存后检索或修改的。
而sax方式是以缓存的方式流读入的方式,检索输入的文本信息。用方式通知实现方法显示数据的。
所以当文件较大时候,就会出现性能和内存溢出(outofMemoryError)了。
以上是本人的自己的理解,仅供参考,具体的信息还请参考官方文档。
<?xml version="1.0" encoding="utf-8"?>
<schoolList>
<school id="10001" name="一中" >1000人</school>
<school id="10002" name="二中" >2000人</school>
<school id="10003" name="三中" >3000人</school>
<school id="10004" name="四中" >4000人</school>
</schoolList>
package com.liuxt.xml.tutorial;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class DomParse {
public static String getTypeName(short value){
switch(value){
case Node.ELEMENT_NODE: return "ELEMENT_NODE";
case Node.ATTRIBUTE_NODE: return "ATTRIBUTE_NODE";
case Node.CDATA_SECTION_NODE: return "CDATA_SECTION_NODE";
case Node.COMMENT_NODE: return "COMMENT_NODE";
case Node.DOCUMENT_FRAGMENT_NODE: return "DOCUMENT_FRAGMENT_NODE";
case Node.DOCUMENT_NODE: return "DOCUMENT_NODE";
case Node.ENTITY_NODE: return "ENTITY_NODE";
case Node.TEXT_NODE: return "TEXT_NODE";
}
return null;
}
public static void main(String arge[]) {
long beginTime = System.currentTimeMillis();
DocumentBuilderFactory factory;
DocumentBuilder builder;
try {
File f = new File("xml/school.xml");
factory = DocumentBuilderFactory.newInstance();
builder = factory.newDocumentBuilder();
Document doc = builder.parse(f);
NodeList schoolList = doc.getElementsByTagName("school");
Node schoolNode,idNode,nameNode;
for (int i = 0; i < schoolList.getLength(); i++) {
schoolNode=schoolList.item(i);
showNodeInfo(schoolNode);
idNode=schoolNode.getAttributes().getNamedItem("id");
showNodeInfo(idNode);
nameNode=schoolNode.getAttributes().getNamedItem("id");
showNodeInfo(nameNode);
}
} catch (Exception e) {
e.printStackTrace();
}
showTime(beginTime);
}
private static void showTime(long lasting) {
System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) + " 毫秒");
}
private static void showNodeInfo(Node schoolNode) {
String nodeName;
String nodeValue;
short nodeType;
nodeType=schoolNode.getNodeType();
nodeName=schoolNode.getNodeName();
nodeValue=schoolNode.getNodeValue();
System.out.println("node Type is :"+getTypeName(nodeType));
System.out.println("node name is :"+nodeName);
System.out.println("node value is :"+nodeValue);
}
}
package com.liuxt.xml.tutorial;
import java.util.Iterator;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
public class JdomParse {
public static void main(String[] args) {
try {
Document document = new SAXBuilder().build("xml/school.xml");
Element schools = document.getRootElement();
Iterator it = schools.getChildren().iterator();
while (it.hasNext()) {
Element school = (Element) it.next();
String id=school.getAttributeValue("id");
String name=school.getAttributeValue("name");
System.out.println("id:"+id +" name:"+name);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.liuxt.xml.tutorial;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SaxParse extends DefaultHandler {
java.util.Stack tags = new java.util.Stack();
public SaxParse() {
super();
}
public static void main(String args[]) {
long lasting = System.currentTimeMillis();
try {
SAXParserFactory sf = SAXParserFactory.newInstance();
SAXParser sp = sf.newSAXParser();
DefaultHandler reader = new SaxParse();
sp.parse(new InputSource("xml/school.xml"), reader);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("运行时间:" + (System.currentTimeMillis() - lasting)
+ " 毫秒");
}
public void characters(char ch[], int start, int length)
throws SAXException {
String tag = (String) tags.peek();
if (tag.equals("school")) {
System.out.println("学校人数:" + new String(ch, start, length));
}
}
@SuppressWarnings("unchecked")
public void startElement(String uri, String localName, String qName,
Attributes attrs) {
tags.push(qName);
if(qName.equals("school")){
System.out.println(qName);
System.out.println("id:"+attrs.getValue("id"));
System.out.println("name:"+attrs.getValue("name"));
}
}
}
而sax方式是以缓存的方式流读入的方式,检索输入的文本信息。用方式通知实现方法显示数据的。
所以当文件较大时候,就会出现性能和内存溢出(outofMemoryError)了。
以上是本人的自己的理解,仅供参考,具体的信息还请参考官方文档。
<?xml version="1.0" encoding="utf-8"?>
<schoolList>
<school id="10001" name="一中" >1000人</school>
<school id="10002" name="二中" >2000人</school>
<school id="10003" name="三中" >3000人</school>
<school id="10004" name="四中" >4000人</school>
</schoolList>
package com.liuxt.xml.tutorial;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class DomParse {
public static String getTypeName(short value){
switch(value){
case Node.ELEMENT_NODE: return "ELEMENT_NODE";
case Node.ATTRIBUTE_NODE: return "ATTRIBUTE_NODE";
case Node.CDATA_SECTION_NODE: return "CDATA_SECTION_NODE";
case Node.COMMENT_NODE: return "COMMENT_NODE";
case Node.DOCUMENT_FRAGMENT_NODE: return "DOCUMENT_FRAGMENT_NODE";
case Node.DOCUMENT_NODE: return "DOCUMENT_NODE";
case Node.ENTITY_NODE: return "ENTITY_NODE";
case Node.TEXT_NODE: return "TEXT_NODE";
}
return null;
}
public static void main(String arge[]) {
long beginTime = System.currentTimeMillis();
DocumentBuilderFactory factory;
DocumentBuilder builder;
try {
File f = new File("xml/school.xml");
factory = DocumentBuilderFactory.newInstance();
builder = factory.newDocumentBuilder();
Document doc = builder.parse(f);
NodeList schoolList = doc.getElementsByTagName("school");
Node schoolNode,idNode,nameNode;
for (int i = 0; i < schoolList.getLength(); i++) {
schoolNode=schoolList.item(i);
showNodeInfo(schoolNode);
idNode=schoolNode.getAttributes().getNamedItem("id");
showNodeInfo(idNode);
nameNode=schoolNode.getAttributes().getNamedItem("id");
showNodeInfo(nameNode);
}
} catch (Exception e) {
e.printStackTrace();
}
showTime(beginTime);
}
private static void showTime(long lasting) {
System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) + " 毫秒");
}
private static void showNodeInfo(Node schoolNode) {
String nodeName;
String nodeValue;
short nodeType;
nodeType=schoolNode.getNodeType();
nodeName=schoolNode.getNodeName();
nodeValue=schoolNode.getNodeValue();
System.out.println("node Type is :"+getTypeName(nodeType));
System.out.println("node name is :"+nodeName);
System.out.println("node value is :"+nodeValue);
}
}
package com.liuxt.xml.tutorial;
import java.util.Iterator;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
public class JdomParse {
public static void main(String[] args) {
try {
Document document = new SAXBuilder().build("xml/school.xml");
Element schools = document.getRootElement();
Iterator it = schools.getChildren().iterator();
while (it.hasNext()) {
Element school = (Element) it.next();
String id=school.getAttributeValue("id");
String name=school.getAttributeValue("name");
System.out.println("id:"+id +" name:"+name);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.liuxt.xml.tutorial;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SaxParse extends DefaultHandler {
java.util.Stack tags = new java.util.Stack();
public SaxParse() {
super();
}
public static void main(String args[]) {
long lasting = System.currentTimeMillis();
try {
SAXParserFactory sf = SAXParserFactory.newInstance();
SAXParser sp = sf.newSAXParser();
DefaultHandler reader = new SaxParse();
sp.parse(new InputSource("xml/school.xml"), reader);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("运行时间:" + (System.currentTimeMillis() - lasting)
+ " 毫秒");
}
public void characters(char ch[], int start, int length)
throws SAXException {
String tag = (String) tags.peek();
if (tag.equals("school")) {
System.out.println("学校人数:" + new String(ch, start, length));
}
}
@SuppressWarnings("unchecked")
public void startElement(String uri, String localName, String qName,
Attributes attrs) {
tags.push(qName);
if(qName.equals("school")){
System.out.println(qName);
System.out.println("id:"+attrs.getValue("id"));
System.out.println("name:"+attrs.getValue("name"));
}
}
}
- xmlparse.zip (150.8 KB)
- 下载次数: 10
发表评论
-
Java里面的同步跟oracle的锁的联想
2009-07-16 08:21 1174暂时不讨论。不明白 -
想做一个JMSServer,实现10000/s可以吗?
2009-07-02 17:51 1038本贴已经删除,有很多东西需要学习。谢谢大大家给予的建议和批评啊 ... -
Spring的事务管理例子代码
2009-06-27 10:29 3444事务管理: 分global事务管理和local事务管理, ... -
Java String中的hashCode函数
2009-06-27 09:43 4265String 类中的hash函数如下: public ... -
java中HashCode的作用和Map的实现结构
2009-06-25 22:50 3906Map 是一种数据结构,用来实现key和value 的映射。通 ... -
使用Spring后会带来什么好处
2009-06-23 16:20 9351 为你的项目增加一个管家,你不必写很多的代码去实现一些框架已 ... -
jboss EJB
2009-06-15 14:39 819暂时不讨论。不明白 -
简单的归并排序算法例子
2009-06-14 21:36 1063import java.util.ArrayList;impo ... -
Jboss消息中间件跟IBM MQ的比较
2009-06-12 21:28 1603简单说几点. 1 jboss消息以java编写,嵌入到jbo ... -
Jboss message point to point
2009-06-12 21:17 885下面的例子程序是从Jbos ... -
Jboss SubscriberClient 主动式接受消息
2009-06-11 21:35 692下载jboss后面,按照默认启动就可以。 packag ... -
http报文
2009-06-11 21:09 2552HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII ... -
面向对象的三个特征
2009-06-11 20:52 780面向对象的三个基本特征是:封装、继承、多态。 Th ... -
java的同样排序函数的执行效率
2009-06-11 20:50 1304package com.liuxt.sort; import ... -
apache ab 性能测试
2009-06-10 20:22 1493测试结果的说明:参考文章:http://www.phpchin ... -
java虚拟机规范 3.5 运行期数据区
2009-06-10 14:35 925http://java.sun.com/docs/books/ ... -
java SQL注入分析程序
2009-06-09 22:11 1966DROP TABLE IF EXISTS `user`;CRE ... -
java virtural machine data type
2009-06-08 16:35 674data ... -
memcached 的linux配置
2009-06-03 22:45 681详细参选下面的连接: http://www.ccvita.co ... -
memcached 的java 客户端的简单测试代码
2009-06-03 22:42 1548import java.io.IOException; imp ...
相关推荐
Java解析XML文件主要涉及两种方式:DOM(Document Object Model)和SAX(Simple API for XML)。DOM和SAX都是用于处理XML数据的API,但在处理方式和效率上有显著区别。 DOM解析方式: DOM是一种将XML文件加载到内存...
parser->parse(xmlFile); DOMDocument* doc = parser->getDocument(); // 遍历并打印文档内容 DOMNode* node = doc->getFirstChild(); while (node) { printf("%s\n", node->getNodeName()); node = node->...
- 对于SAX解析,我们需要实现org.xml.sax.ContentHandler接口,并使用org.xml.sax.XMLReader和org.xml.sax.InputSource。我们先创建XMLReader,设置ContentHandler,然后读取XML文件。当解析器遇到XML元素时,会调用...
标题中的"DOM_XML.rar"可能是一个包含DOM解析XML相关示例的压缩文件,"DOM_dom xml_dom xml java_dom解析xml_java解析xml"这部分描述了文件的主要内容,即关于DOM(Document Object Model)在XML解析中的应用,特别...
在Java中,使用SAX解析器(如`org.xml.sax.helpers.DefaultHandler`)可以实现SAX解析。以下是一个简单的SAX解析示例: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml....
import org.xml.sax.SAXException; /** * DOM读取XML示例 * @author whwang */ public class TestDom { public static void main(String[] args) { read(); } public static void read() { ...
File xmlFile = new File("resources/file.xml"); // 或者使用Paths类 Path path = Paths.get("resources", "file.xml"); ``` 确保正确设置当前工作目录,或者使用绝对路径以避免路径问题。 总结,这四种XML解析...
在Qt框架中,处理XML文件是常见的需求,本项目提供了一个使用DOM(Document Object Model)和SAX(Simple API for XML)两种解析方式的示例,帮助开发者理解如何在Qt环境下进行XML文件的读写操作。 首先,DOM是一种...
1. **加载XML文件**:使用`minidom.parse()`函数读取XML文件并创建一个DOM对象。 ```python xml_file = "example.xml" # 你的XML文件路径 doc = minidom.parse(xml_file) ``` 2. **查找特定节点**:DOM模型中...
因此,在处理大型XML文档时,可能需要考虑使用SAX(Simple API for XML)或StAX(Streaming API for XML)等更轻量级的解析方式。 总的来说,DOM在Java与XML的联合编程中提供了一种强大且灵活的机制,使得开发者...
import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.SAXException; //... class MyHandler extends DefaultHandler { @Override public void startElement(String uri, String localName, String ...
import org.xml.sax.helpers.DefaultHandler; public class SAXExample extends DefaultHandler { private String currentElement = ""; @Override public void startElement(String uri, String localName, ...
Document doc = dBuilder.parse(new File("path_to_xml_file.xml")); // 遍历Document对象 doc.getDocumentElement().normalize(); NodeList nodeList = doc.getElementsByTagName("tag_name"); for (int i = 0; i ...
import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SaxExample extends DefaultHandler { @Override public void startElement(String...
4. **实现自定义处理器(Custom Handler)**:开发人员通常需要实现`org.xml.sax.helpers.DefaultHandler`类或其子类,并覆盖上述事件处理方法,以便在解析过程中进行业务逻辑处理。 5. **解析过程**: - 创建SAX...
public void parseXMLFile(String filePath) { try { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); parser.parse(filePath, this); } catch ...
首先,创建一个继承自`org.xml.sax.helpers.DefaultHandler`的类,重写其中的方法,如`startElement()`、`endElement()`和`characters()`,以处理XML元素的开始、结束和字符数据。 2. **注册解析器**: 使用`org....
2. 创建一个实现了`org.xml.sax.helpers.DefaultHandler`接口的类,覆盖上述提到的事件处理器方法,定义具体的业务逻辑。 3. 实例化`SAXParserFactory`,并调用`newSAXParser()`方法创建`SAXParser`对象。 4. 使用`...
saxParser.parse("path_to_xml_file", new MyHandler()); ``` 2. **Pull解析器** Pull解析器是Android平台常用的XML解析方式,其原理与SAX类似,但API更简洁。在Java 1.6及以上版本中,提供了`XMLPullParser`类。...
public static void parseXML(String xmlString) { try { DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Input...