Java中XML格式的字符串4读取方式的简单比较

时间:2022-08-28 23:24:55

Java中XML格式的字符串4读取方式的简单比较

1.java自带的DOM解析.
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

public class ReaderXmlForDOM {

public static void main(String args[]) {
String text ="<XML><A>123</A><B>whl123</B><C>亮亮</C><D>1</D><E>1</E><F>165074</F><G>贫穷</G><H>1698.0</H><I>初级士官</I><J>湖南</J><K>常德</K><L>1</L></XML>"

long begin = System.currentTimeMillis();
parse( text );
long after = System.currentTimeMillis();
System.out.println("DOM用时"+(after-begin)+"毫秒");
}

public static void parse(String protocolXML) {

try {
DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder
.parse(new InputSource(new StringReader(protocolXML)));

Element root = doc.getDocumentElement();
NodeList books = root.getChildNodes();
if (books != null) {
for (int i = 0; i < books.getLength(); i++) {
Node book = books.item(i);
System.out.println("节点=" + book.getNodeName() + "\ttext="
+ book.getFirstChild().getNodeValue());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
我当时dom解析用时是个不稳定的值在62-78毫秒之间.
以下的三种方法mian方法里面都是一样的解析那段字符串,记录用时,就不在贴出, 只贴出所用的解析部分
2.java自带的SAX解析.
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class ReaderXmlForSAX {
public static void parse(String protocolXML) {

try {
SAXParserFactory saxfac = SAXParserFactory.newInstance();
SAXParser saxparser = saxfac.newSAXParser();
TestSAX tsax = new TestSAX();
saxparser.parse(new InputSource(new StringReader(protocolXML)),tsax);
} catch (Exception e) {
e.printStackTrace();
}
}
}

class TestSAX extends DefaultHandler{

private StringBuffer buf;
private String str;
public TestSAX(){
super();
}

public void startDocument() throws SAXException{
buf=new StringBuffer();
System.out.println("*******开始解析XML*******");
}

public void endDocument() throws SAXException{
System.out.println("*******XML解析结束*******");
}

public void endElement(String namespaceURI,String localName,String fullName )throws SAXException{
str = buf.toString();
System.out.println("节点="+fullName+"\tvalue="+buf+" 长度="+buf.length());
System.out.println();
buf.delete(0,buf.length());
}

public void characters( char[] chars, int start, int length )throws SAXException{
//将元素内容累加到StringBuffer中
buf.append(chars,start,length);
}
}
SAX用时是62毫秒,最快的.但是需要多写一个类
3.DOM4J解析,需要下载对应的jar包
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

public class ReaderXmlForDOM4J {
//DOM4j解析XML
public static void parse(String protocolXML) {

try {

Document doc=(Document)DocumentHelper.parseText(protocolXML);
Element books = doc.getRootElement();
System.out.println("根节点"+books.getName());
// Iterator users_subElements = books.elementIterator("UID");//指定获取那个元素
Iterator Elements = books.elementIterator();
while(Elements.hasNext()){
Element user = (Element)Elements.next();
System.out.println("节点"+user.getName()+"\ttext="+user.getText());
List subElements = user.elements();
// List user_subElements = user.elements("username");指定获取那个元素
// System.out.println("size=="+subElements.size());
// for( int i=0;i<subElements.size();i++){
// Element ele = (Element)subElements.get(i);
// System.out.print(ele.getName()+" : "+ele.getText()+" ");
// }
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
DOM4J的用时为140毫秒,慢 并且还需要单独的jar包
4.JDOM解析,需要下载对应的jar包
import java.io.StringReader;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.xml.sax.InputSource;

public class ReaderXmlForJDOM {
public static void parse(String protocolXML) {
SAXBuilder builder=new SAXBuilder(false);
try {
Document doc = builder.build(new InputSource(new StringReader(protocolXML)));
Element eles = doc.getRootElement(); // 得到根元素
System.out.println("根节点"+eles.getName());

List<Element> list = eles.getChildren(); // 得到元素的集合
//List studentList = students.getChildren("student"); // 得到指定元素(节点)的集合

if( list!=null){
for (int i = 0; i < list.size(); i++) {
Element book = (Element)list.get(i);
System.out.println("节点=" + book.getName() + "\ttext="
+ book.getValue());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
JDOM的用时为125毫秒,比较慢 并且还需要单独的jar包

Java中XML格式的字符串4读取方式的简单比较的更多相关文章

  1. java解析Xml格式的字符串

    最近在工作中,需要调别的接口,接口返回的是一个字符串,而且内容是xml格式的,结果在解析json的时候报错,最终修改了接口的返回方式,以Map返回, 才得以接收到这个xml的字符串,然后通过dom4j ...

  2. Dom4j解析xml格式的字符串【java】

    一般我们会使用dom4j.SAX.w3c来解析xml文件,网上也大多提供此类解决方案. 但在实际项目中,也有会解析xml格式的字符串报文的. 比如,有如下字符串: String = "&lt ...

  3. 读取xml格式的字符串和上下文中的xml数据

    1.读取xml格式的字符串 假设有一段下面的xml格式的字符串: <xml>     <return_code><![CDATA[SUCCESS]]></re ...

  4. 第70节&colon;Java中xml和tomcat

    第70节:Java中xml和tomcat 前言: 哭着也要看完,字数: jdbc crud - statement dao java.sql.Driver The interface that eve ...

  5. C&num;操作数据表中XML格式的数据

    以前还真没有见过数据表中存储XML格式的数据,刚开始听说的时候,还以为是数据表中有XML的字段类型, 再了解,其实也就是字符串类型的,只不过字符串的格式是XML格式的.确实孤陋寡闻!汗... (可添加 ...

  6. Java中XML数据

    Java中XML数据 XML解析——Java中XML的四种解析方式 XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解 ...

  7. 使用WCF传输DataTable:DataTable和Xml格式的字符串相互转换(C&num;)

    背景:项目中要用到客户端向服务端传数据,使用WCF,绑定webHttpBinding,做了一个小例子. 业务逻辑简介:客户端在a表中添加了几条数据,从SQL Server数据库直接取出新添加的数据(D ...

  8. Java中各种集合(字符串类)的线程安全性!!!

    Java中各种集合(字符串类)的线程安全性!!! 一.概念: 线程安全:就是当多线程访问时,采用了加锁的机制:即当一个线程访问该类的某个数据时,会对这个数据进行保护,其他线程不能对其访问,直到该线程读 ...

  9. soapui如何发送xml格式的字符串

    一个服务需要的xml格式的字符串参数,用soapUI传递参数时要这样写: <![CDATA[<?xml version="1.0" encoding="UTF ...

随机推荐

  1. centos7 安装拼音输入法(转载)

    http://m.blog.csdn.net/article/details?id=52137523

  2. IS&lowbar;ERR、PTR&lowbar;ERR、ERR&lowbar;PTR

    最近在使用filp_open打开文件时遇到到一个问题,当打开一个并不存在的文件时,filp_open返回值值为0xfffffffe,而并不是0(NULL),这是因为内核对返回指针的函数做了特殊处理.内 ...

  3. 在eclipse里卸载已安装的插件&lbrack;例如Android Development Tools ADT&rsqb;

    在eclipse里卸载已安装的插件                                        有四种方法: 1.到plugins和features目录中找到你要卸载的插件的文件夹, ...

  4. Activiti 工作流得到最后一次批注的时间

    我们有时候在工作流开发中可能会遇到这样的需求,就是已经审批结束的流程,可能我们还是仍然需要修改业务表的结果,而且我们需要一个时间期限,比如:在5天内可以进行修改 ,这个时候我们就需要得到我们最后一步审 ...

  5. hibernate里的generator中class &equals;value介绍

    在*.hbm.xml必须声明的<generator>子元素是一个Java类的名字,用来为该持久化类的实例生成唯一的标识.<generator class="sequence ...

  6. css运用中,对position属性的认识

    position属性有: static : 无特殊定位,对象遵循HTML定位规则 absolute : 将对象从文档流中拖出,使用left,right,top,bottom等属性进行绝对定位.而其层叠 ...

  7. Drools文档(六) 用户手册

    用户手册 基础 无状态的知识Session Drools规则引擎拥有大量的用例和功能,我们要如何开始?你无须担心,这些复杂性是分层的,你可以用简单的用例来逐步入门. 无状态Session,无须使用推理 ...

  8. 觉得OpenStack的网络复杂?其实你家里就有同样一个网络

    当你想了解OpenStack的Neutron网络,打开下面这张图的时候,心里一定是崩溃的,看起来这些模块连在一起很复杂,但其实和你家里的网络很像,看不出来?看我来慢慢解析. 其实这个网络的样子更像是我 ...

  9. SpringBoot 集成 Swageer2

    添加Maven依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox ...

  10. Go代码重构:23倍的性能爆增

    几周前,我读了一篇名为“ Good Code vs Go Code中的错误代码 ”的文章,作者指导我们逐步完成实际业务用例的重构. 本文的重点是将“坏代码”转变为“良好代码”:更具惯用性,更易读,利用 ...