- 浏览: 1251203 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (399)
- 心情故事 (12)
- java (115)
- linux (55)
- 关系型数据库 (35)
- struts,jsf,spring (11)
- jdbc,hibernate,ibatis (11)
- jsp,jstl,c:tag,标签库 (2)
- ejb,webservice (1)
- tomcat,jboss,jetty,weblogic,websphere (15)
- java网络编程 (6)
- java线程 (0)
- js,jquery,json,xml,dom,html.regex (25)
- 设计模式 (6)
- BUG记录 (2)
- ant (2)
- jsp,servlet (4)
- swing (6)
- lucene+nutch (6)
- log4j (2)
- windows doc (2)
- ruby (1)
- ruby on rails (3)
- 操作系统网络 (18)
- apache 错误 (1)
- tomcat (10)
- jboss (9)
- jetty (9)
- weblogic (9)
- websphere (10)
- apache (2)
- AIX的iostat命令查看系统磁盘的使用情况 (1)
- oracle 统计一个表格有多少列 (1)
- Exception in thread "main" java.security.KeyStoreException: Windows-MY not found (1)
- jsp (1)
- jstl (1)
- c:tag (1)
- 标签库 (1)
- struts (1)
- jsf (1)
- spring (2)
- oracle,sqlplus (2)
- sqlplus (2)
- show errors (1)
- proc (1)
- function (1)
- ORA-06544: PL/SQL: internal error (1)
- arguments: [55916] (1)
- [] (7)
- 终端身份实施文档 (1)
- 重装系统之后飞鸽传书只能看到自己 (1)
- vsftp "上传 553 Could not create file" (1)
- startWebLogic.sh启动失败,提示Error initializing Embedded LDAP Server (1)
- java agent 注册为 windows 服务 (1)
- centos (1)
- svn (1)
- apr (1)
- apr-util (1)
- activemq (2)
- oracle (5)
- mysql (3)
- nosql (3)
- NSIS (1)
- windows wmic (1)
- c 指针 (1)
- c c++ (0)
- jmeter (0)
- 性能测试 (0)
- linux,备份 (2)
- C++ ,Virtual (1)
- windows dos (1)
- android (2)
- 大数据,云计算 (1)
- JVM垃圾收集 (1)
- jdbc (2)
- invoke (1)
- hibernate (1)
- ibatis (1)
- 个人开源项目源码收藏 (1)
- 批处理 (1)
- Mongodb mapreduce (8)
- kettle (1)
- Mongodb capped (1)
- mongodb gridfs (1)
- Mongodb 入门基础知识 (1)
- mongodb (8)
- hadoop2.5.1 (1)
- hadoop (4)
- eclipse (1)
- hdfs fs (1)
- elipse hadoop plugin (1)
- PHP相关知识 (1)
- js (1)
- jquery (1)
- json (1)
- xml (1)
- dom (1)
- html.regex (1)
- 网络知识 (1)
- nginx (1)
- docker (1)
- 测试 (1)
- nodejs (1)
- iptables (1)
- linux gitlab (1)
最新评论
-
July01:
最近了解到一款StratoIO打印控件,功能如下:1、Html ...
web页面调用window.print()函数实现打印的功能 -
hxdtech:
非常感谢!
我在学习ibatis时的培训ppt -
zmwxiaoming:
what 能连数据库不错
SOLR的学习整理 -
springdata_springmvc:
java程序语言学习教程 地址http://www.zuida ...
java获取当前操作系统的信息 -
huanzei:
整理的不错,
oracle lpad函数
1首先是XMl文档
<?xml version="1.0" encoding="UTF-8"?> <cve xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://cve.mitre.org/cve/downloads" xsi:noNamespaceSchemaLocation="http://cve.mitre.org/schema/cve/cve_1.0.xsd"> <item type="CVE" name="CVE-1999-0002" seq="1999-0002"> <status>Entry</status> <desc>Buffer overflow in NFS mountd gives root access to remote attackers, mostly in Linux systems.</desc> <refs> <ref source="SGI" url="ftp://patches.sgi.com/support/free/security/advisories/19981006-01-I">19981006-01-I</ref> <ref source="CERT">CA-98.12.mountd</ref> <ref source="CIAC" url="http://www.ciac.org/ciac/bulletins/j-006.shtml">J-006</ref> <ref source="BID" url="http://www.securityfocus.com/bid/121">121</ref> <ref source="XF">linux-mountd-bo</ref> </refs> </item> </cve>
2具体的解析类:
package com.test; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.util.ArrayList; import java.util.List; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import com.bean.Item; import com.bean.Ref; public class StaxTest { //基于事件流的方式来做的,通过使用流的API,像指针一样的来处理文档,每一个节点都可以返回一个事件。处理完以后由JVM来回收内存。 public static void main(String[] args) throws IOException, XMLStreamException { StaxTest test = new StaxTest(); File file = new File("src/test.xml"); test.read(file); } public void read(File file) throws IOException, XMLStreamException { Long time = null; XMLInputFactory factory = XMLInputFactory.newInstance(); Reader fileReader = new FileReader(file); factory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE); XMLStreamReader reader = factory.createXMLStreamReader(fileReader); try { int event = reader.getEventType();//获取节点类型,结果是以整形的方式返回的。 //这里的3个对象是具体的POJO Item item = null; Ref ref = null; List<Ref> refList = null;//用来存放POJO的集合 while (true) { switch (event) { case XMLStreamConstants.START_DOCUMENT://表示的是文档的开通节点。 time = System.currentTimeMillis(); break; case XMLStreamConstants.START_ELEMENT://开始解析开始节点 if (reader.getLocalName().equals("item")) {//判断节点的名字 item = new Item();//实例化一个节点POJO类 refList = new ArrayList<Ref>(); //给节点赋值 item.setType(reader.getAttributeValue(0));//getAttributeValue(index)获取属性的值,可能有多个属性。 item.setName(reader.getAttributeValue(1)); item.setSeq(reader.getAttributeValue(2)); } if (reader.getLocalName().equals("status")) { item.setStatus(reader.getElementText()); } if (reader.getLocalName().equals("desc")) { item.setDesc(reader.getElementText()); } if (reader.getLocalName().equals("ref")) { ref = new Ref(); ref.setSource(reader.getAttributeValue(0)); if (reader.getAttributeCount() > 2) { ref.setUrl(reader.getAttributeValue(1)); } ref.setText(reader.getElementText()); System.out.println("-----------refs--ref-------------"); if (reader.getAttributeCount() > 2) { System.out.println("url: " + reader.getAttributeValue(1)); } } break; case XMLStreamConstants.CHARACTERS: // if(reader.isWhiteSpace()) // break; break; //文档的结束元素 case XMLStreamConstants.END_ELEMENT: if (reader.getLocalName().equals("item")) { item.setRefList(refList); } break; //文档的结束。 case XMLStreamConstants.END_DOCUMENT: System.out.println("-----------end Document--------"); time = System.currentTimeMillis() - time; System.out.println("耗时: " + time + "毫秒"); break; } if (!reader.hasNext()) { break; } event = reader.next(); } } finally { reader.close(); } } }
3使用的其它类POJO
public class Item implements Serializable { /** * */ private static final long serialVersionUID = 1L; private String type; private String name; private String seq; private String status; private String desc; private List<Ref> refList = new ArrayList<Ref>(); public String getType() { return type; } public void setType(String type) { this.type = type; } ..................................
private static final long serialVersionUID = 1L; private String source; private String url; private String text; public String getSource() { return source; } public void setSource(String source) { this.source = source; } ............................
4 使用的jar 包 stax-1.2.0.jar
stax-api-1.0.1.jar
评论
2 楼
ivanf8e62
2013-11-25
aa00aa00 写道
用过jdom,dom4j和sax,感觉SAX方式是最快的,呵呵,你的这种方式没有用过,感觉和SAX差不多吧,呵呵!!
并发量小看不出来, 但是并发大一点下,你就知道SAX慢得跟什么似的了。 我做了50000请求量, 并发线程200条(CycilcBarrier 同步推 200线程并发请求), 随便怎么压测, 用SAX解析的TPS 比 STAX少了2倍不止。 虽然STAX写解析代码麻烦点,但是速度快的。
1 楼
aa00aa00
2011-12-30
用过jdom,dom4j和sax,感觉SAX方式是最快的,呵呵,你的这种方式没有用过,感觉和SAX差不多吧,呵呵!!
发表评论
-
centos6.5 hadoop伪分布式搭建
2017-01-10 10:41 25打算整理下machine learn ,再次安装 ... -
springboot
2016-12-29 11:13 2381微服务,现在是一个越来越热的东西,软件架构发展到 ... -
elk安装记录
2016-12-27 18:04 980在centos6.5上安装elk,记录下安装过程和 ... -
dubbo服务框架
2016-12-23 15:40 480上一篇文章介绍了zookeeper,作为服务 ... -
zookeeper服务注册中心配置
2016-12-22 11:40 1663用zookeeper有一段时间了,把配置做下简 ... -
OS X 安装java开发环境
2016-12-03 23:29 591... -
关于Restful API 的设计
2015-06-12 13:32 2275Restful API的流行,很大程度上被当前的移动 ... -
Jvisualvm远程连接tomcat配置:
2015-05-12 16:16 781JvisualVm 监控远程Tomcat,需要在To ... -
jdbc mybatis hibernate springJDBC的一些理解
2015-01-15 17:10 7064... -
Java 的ExecutorService
2015-01-15 11:45 1216早期在Java5以前,我们做多线程程序,一般都 ... -
spring的IOC和AOP
2015-01-14 16:47 2352关于Spring,大家都是耳熟 ... -
java 的线程安全
2014-12-30 14:43 959现代CPU基本都是多核,支持 ... -
JVM ClassLoader
2014-12-25 16:33 936JVM在加载类的时候,都是通过ClassLoad ... -
minor Gc ,Full Gc
2014-12-24 17:22 2102在发生Minor gc之前,虚拟机会先检查老年带最 ... -
Java的主要垃圾回收器
2014-12-24 16:33 1307对象 ... -
JVM的内存结构的一点理解
2014-12-24 11:30 777... -
利用生产者消费者模式实现串行的任务并行化
2014-12-22 17:48 1235试想,一个省有100个处理节点需要 ... -
利用生产者消费者模式实现串行的任务并行化
2014-12-22 17:48 0试想,一个省有100个处理节点需要 ... -
关于Linux的Ulimit参数
2014-12-22 12:13 1275JVM 64位平台与32位平台 ... -
一种表格数据比对的方法
2014-12-19 16:59 1047假设有连个库,一个是生产库,一个是备份库,在一个特 ...
相关推荐
使用StAX解析XML文档则需要借助`XMLInputFactory`和`XMLStreamReader`类完成。下面是一个简单的例子: ```java XMLInputFactory factory = XMLInputFactory.newInstance(); XMLStreamReader reader = factory....
Axis2在性能上的提升也得益于采用StAX解析XML。 总之,StAX提供了一种高效、低内存开销的方式来处理XML,尤其适用于处理大型XML文档和需要高性能的应用场景。通过组装和解析XML,开发人员可以灵活地在应用程序之间...
以下是一些关于解析XML文件的知识点: 1. XML结构: - 根元素:XML文档必须有一个根元素,所有其他元素都包含在这个根元素内。 - 元素:XML中的基本单位,用尖括号 `< >` 包围,如 `<book>`。 - 属性:元素可以...
以下是一个使用StAX解析XML的例子: ```java import java.io.FileInputStream; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamReader;...
DOM4J是一个Java库,提供了一个灵活且强大的API来处理XML,包括DOM、SAX和StAX的集成。相比DOM,DOM4J更易于使用,支持XPath查询。 - 引入DOM4J库,如`dom4j-1.6.1.jar`。 - 使用`DocumentHelper`类的`parseText()`...
以下是一个简单的SAX解析XML的例子: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SaxExample extends DefaultHandler {...
1. DOM解析器:它将整个XML文档加载到内存中,形成一个树形结构,称为DOM树。这样做的好处是可以方便地遍历和修改整个文档,但缺点是如果XML文档较大,可能会消耗大量内存。以下是一个简单的Java DOM解析示例: ```...
这个例子中的"soap2"可能是项目中的一个具体示例,它可能包含了一个完成上述步骤的Java类或测试用例。测试成功并能在多个IDE中运行,意味着代码具有较好的兼容性和可靠性。 总结,调用Java中的Web服务并解析XML涉及...
在StAX中,解析XML文档有两种主要的角色:XMLStreamReader(用于读取)和XMLStreamWriter(用于写入)。XMLStreamReader允许开发者按需逐事件地读取XML,而XMLStreamWriter则可以逐事件地构造XML文档。这样,开发者...
1. DOM解析器:DOM是W3C推荐的一种解析XML的标准方式,它将整个XML文档加载到内存中形成一个树形结构,称为DOM树。通过DOM解析器,开发者可以轻松地遍历整个文档,访问任何元素或属性。优点是可以任意位置访问,但...
DOM(文档对象模型)解析器将整个XML文档加载到内存中,形成一个树形结构,方便通过节点遍历获取信息。例如,使用Java的`javax.xml.parsers.DocumentBuilderFactory`和`DocumentBuilder`类可以创建DOM解析器,然后...
以下是一个简单的DOM解析XML的例子: ```java import javax.xml.parsers.*; import org.w3c.dom.*; import java.io.*; public class DOMExample { public static void main(String[] args) { try { ...
- 以下是一个简单的DOM4J解析XML的例子: ```java import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; public class Dom4jExample { public static void main(String...
相比于传统的DOM、SAX或StAX解析器,xmappr通过其直观的API降低了XML处理的复杂性,提高了开发效率。 首先,要使用xmappr,你需要在你的项目中引入它的依赖。如果你的项目是Maven项目,可以在pom.xml文件中添加以下...
2. **DOM4J**:DOM4J是另一个流行的Java XML解析库,它不仅支持DOM,还支持SAX和StAX解析。DOM4J提供了更为灵活的API,可以方便地进行XML的读写操作。以下是一个使用DOM4J读取XML文档的例子: ```java ...
在这个“dom4j解析xml例子”中,我们将深入探讨DOM4J如何帮助开发者在Java环境中有效地处理XML数据。 首先,我们需要了解XML(Extensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置...
这个例子生成了一个简单的XML文档:`<root>Hello, World!</root>`。在实际应用中,可以根据需求递归地调用`startTag`、`endTag`和`text`方法来构建复杂的XML结构。 总的来说,使用Pull解析器读取和生成XML文件是一...
总结来说,DOM解析XML是通过构建一个完整的XML文档对象模型,然后通过这个模型进行数据的读取和操作。这种方式适合处理较小的XML文件,因为整个文件会被加载到内存中,对于大文件可能会消耗大量资源。对于大型XML...
4. **StAX解析**:Streaming API for XML(StAX)是基于流的解析,允许应用程序以迭代方式处理XML事件。它比SAX更灵活,允许向前和向后导航,但不支持随机访问。 这个Web工程中的测试代码可能涵盖了这些解析方式的...
以下是一个DOM4J解析XML的简单示例: ```java import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; public class Dom4jExample { public static void main(String[] args) {...