`
liu0107613
  • 浏览: 74626 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

parse xml file with dom and sax .

    博客分类:
  • java
阅读更多
基于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"));
}

}


}



  
 



分享到:
评论

相关推荐

    Java解析XML文件的DOM和SAX方式.doc

    Java解析XML文件主要涉及两种方式:DOM(Document Object Model)和SAX(Simple API for XML)。DOM和SAX都是用于处理XML数据的API,但在处理方式和效率上有显著区别。 DOM解析方式: DOM是一种将XML文件加载到内存...

    XML文件c语言 dom和sax模式解析

    parser-&gt;parse(xmlFile); DOMDocument* doc = parser-&gt;getDocument(); // 遍历并打印文档内容 DOMNode* node = doc-&gt;getFirstChild(); while (node) { printf("%s\n", node-&gt;getNodeName()); node = node-&gt;...

    jsp操作xml源码,解析器为DOM和SAX

    - 对于SAX解析,我们需要实现org.xml.sax.ContentHandler接口,并使用org.xml.sax.XMLReader和org.xml.sax.InputSource。我们先创建XMLReader,设置ContentHandler,然后读取XML文件。当解析器遇到XML元素时,会调用...

    DOM_XML.rar_DOM_dom xml_dom xml java_dom解析xml_java解析xml

    标题中的"DOM_XML.rar"可能是一个包含DOM解析XML相关示例的压缩文件,"DOM_dom xml_dom xml java_dom解析xml_java解析xml"这部分描述了文件的主要内容,即关于DOM(Document Object Model)在XML解析中的应用,特别...

    j2ee10:xml01:dom解析和sax解析

    在Java中,使用SAX解析器(如`org.xml.sax.helpers.DefaultHandler`)可以实现SAX解析。以下是一个简单的SAX解析示例: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml....

    Java解析XML汇总DOM_SAX_JDOM_DOM4j_XPath

    import org.xml.sax.SAXException; /** * DOM读取XML示例 * @author whwang */ public class TestDom { public static void main(String[] args) { read(); } public static void read() { ...

    XML 文件解析 DOM DOM4j JDOM SAX 和相对路径的写法 ,代码是有注释的

    File xmlFile = new File("resources/file.xml"); // 或者使用Paths类 Path path = Paths.get("resources", "file.xml"); ``` 确保正确设置当前工作目录,或者使用绝对路径以避免路径问题。 总结,这四种XML解析...

    qt使用DOM和SAX两种方式读写XML文件,代码工程demo,亲测可用

    在Qt框架中,处理XML文件是常见的需求,本项目提供了一个使用DOM(Document Object Model)和SAX(Simple API for XML)两种解析方式的示例,帮助开发者理解如何在Qt环境下进行XML文件的读写操作。 首先,DOM是一种...

    dom_xml.rar

    1. **加载XML文件**:使用`minidom.parse()`函数读取XML文件并创建一个DOM对象。 ```python xml_file = "example.xml" # 你的XML文件路径 doc = minidom.parse(xml_file) ``` 2. **查找特定节点**:DOM模型中...

    Java与XML联合编程之DOM篇.rar_dom xml_dom xml java_java xml

    因此,在处理大型XML文档时,可能需要考虑使用SAX(Simple API for XML)或StAX(Streaming API for XML)等更轻量级的解析方式。 总的来说,DOM在Java与XML的联合编程中提供了一种强大且灵活的机制,使得开发者...

    XML解析DOM/SAX/PULL

    import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.SAXException; //... class MyHandler extends DefaultHandler { @Override public void startElement(String uri, String localName, String ...

    dom-sax解析XML文件-java

    import org.xml.sax.helpers.DefaultHandler; public class SAXExample extends DefaultHandler { private String currentElement = ""; @Override public void startElement(String uri, String localName, ...

    java 操作XML 采用(dom+dom4j)读写源码 lib包

    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 ...

    SAX, DOM, JDOM, DOM4J解析XML文件

    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...

    xml sax解析

    4. **实现自定义处理器(Custom Handler)**:开发人员通常需要实现`org.xml.sax.helpers.DefaultHandler`类或其子类,并覆盖上述事件处理方法,以便在解析过程中进行业务逻辑处理。 5. **解析过程**: - 创建SAX...

    android_sax.rar

    public void parseXMLFile(String filePath) { try { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); parser.parse(filePath, this); } catch ...

    Java解析XML文档(二):sax读取xml文件导出excel

    首先,创建一个继承自`org.xml.sax.helpers.DefaultHandler`的类,重写其中的方法,如`startElement()`、`endElement()`和`characters()`,以处理XML元素的开始、结束和字符数据。 2. **注册解析器**: 使用`org....

    一个关于sax解析xml的demo

    2. 创建一个实现了`org.xml.sax.helpers.DefaultHandler`接口的类,覆盖上述提到的事件处理器方法,定义具体的业务逻辑。 3. 实例化`SAXParserFactory`,并调用`newSAXParser()`方法创建`SAXParser`对象。 4. 使用`...

    使用sax,pull,dom4j解析XML

    saxParser.parse("path_to_xml_file", new MyHandler()); ``` 2. **Pull解析器** Pull解析器是Android平台常用的XML解析方式,其原理与SAX类似,但API更简洁。在Java 1.6及以上版本中,提供了`XMLPullParser`类。...

    简单的sax和dom解析xml实例

    public static void parseXML(String xmlString) { try { DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Input...

Global site tag (gtag.js) - Google Analytics