- 浏览: 205870 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
sscsacdsadcsd:
nginx之类做下反代就好了...当然是一个意思其实我想的是有 ...
解决jQuery的AJAX跨域取xml问题 -
allstar2012:
为什么要对汉字进行双重编码呢?两次使用encodeURl()
【转载】解决js传汉字时候,url乱码的问题 -
qieyi28:
这要是放在strtus2中岂不是悲剧了
【转载】解决js传汉字时候,url乱码的问题 -
qq224:
[img][/img][size=xx-small][/siz ...
Struts2 分页代码 -
358713428:
阳光空气水 写道谢谢分享,一直想学习不错的例子。
颇受启发的一个jQuery Ajax例子~
为了帮助兽兽同学写一个XML的解析..专门复习了下怎么写SAX的解析.
首先,介绍下XML目前的两种写法.
第1种
第2种
rbac.xml
对于第一种的解析,google上铺天盖地的都是...偏偏兽兽同学要的是第2中的解析..当然也是大同小异..ok..他要求还挺多..还必须把每一个数据项都摘出来..以便进行后续开发使用.那好吧..开工!
第2步:针对第2中XML以及其中内容进行准备工作
1.建立org,pos,org_pos的类 便于操作
2.根据SAX原理,写出来handler,用于解析
ParseOrg.java
最后,写出来程序入口即可
SaxParse.java
总结:功能已经实现...输出也很漂亮...当然只针对Organization进行了处理..剩下两个的输出样式不再啰嗦了..
输出结果:
上述结果省略了很多...
具体效果还是执行一下程序,从控制台观看吧...
首先,介绍下XML目前的两种写法.
第1种
<?xml version="1.0"?> <user> <customer> <FirstName>Bob2</FirstName> <LastName>Hustead</LastName> <CustId>abc.123</CustId> </customer> <customer> <FirstName>Bob3</FirstName> <LastName>Hustead</LastName> <CustId>abc.123</CustId> </customer> </user>
第2种
rbac.xml
<?xml version="1.0" encoding="UTF-8"?> <rbac-definition> <organizations> <organization id="1" name="华迪" no="A0" innerno="8790-C9B2-7B08-46FD-A4F8-4157-AD25-5F7B" superiororg="0" virflag="0" status="0" /> <organization id="2" name="业务部" no="A1" innerno="0EBE-1B07-BD59-425E-958E-2281-A473-9383" superiororg="1" virflag="0" status="0" /> <organization id="3" name="软件中心" no="A2" innerno="D30C-FB7A-E7E-49CE-A3D2-695B-0A4A-CD5B" superiororg="1" virflag="0" status="0" /> </organizations> <positions> <position id="1" name="用户" no="A1.1" owner="" /> <position id="2" name="主管" no="A1.2" owner="" /> <position id="3" name="经理" no="A1.3" owner="" /> <position id="4" name="总工" no="A2.1" owner="" /> </positions> <org-poses> <org-pos orgid="2" posid="1" /> <org-pos orgid="2" posid="2" /> <org-pos orgid="2" posid="3" /> <org-pos orgid="3" posid="4" /> <org-pos orgid="3" posid="5" /> </org-poses> </rbac-definition>
对于第一种的解析,google上铺天盖地的都是...偏偏兽兽同学要的是第2中的解析..当然也是大同小异..ok..他要求还挺多..还必须把每一个数据项都摘出来..以便进行后续开发使用.那好吧..开工!
第2步:针对第2中XML以及其中内容进行准备工作
1.建立org,pos,org_pos的类 便于操作
package parseXML; public class Organization { public int id; public String name; public String no; public String innerno; public int superiororg; public int virflag; public int status; public String toString() { String str = ""; str = "the org's id is " + id + ",name is " + name + " ,no is " + no + " ,innerno" + innerno + " ,superiororg is " + superiororg + " ,virflag is " + virflag + " ,status is " + status; return str; } } class Position { private int id; private String name; private String no; private String owner; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getNo() { return no; } public void setNo(String no) { this.no = no; } public String getOwner() { return owner; } public void setOwner(String owner) { this.owner = owner; } } class Org_pos { private int org_id; private int pos_id; public int getOrg_id() { return org_id; } public void setOrg_id(int org_id) { this.org_id = org_id; } public int getPos_id() { return pos_id; } public void setPos_id(int pos_id) { this.pos_id = pos_id; } }
2.根据SAX原理,写出来handler,用于解析
ParseOrg.java
package parseXML; import java.util.ArrayList; import java.util.List; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class ParseOrg extends DefaultHandler { boolean hasAttribute = false; Attributes attributes = null; private List<Organization> orgList=new ArrayList<Organization>(); private List<Position> posList=new ArrayList<Position>(); private List<Org_pos> org_posList=new ArrayList<Org_pos>(); public void startDocument() throws SAXException { System.out.println("~~begining~~"); } public void endDocument() throws SAXException { System.out.println("~~end~~"); } public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (qName.equals("organization")) { System.out.println("********************************"); System.out.println(" Organization :"); System.out.println("********************************"); System.out.println(attributes.getQName(0) + " is : " + attributes.getValue(0)+"\n"+attributes.getQName(1) + "is : " + attributes.getValue(1)+"\n"+attributes.getQName(2) + "is : " + attributes.getValue(2)+"\n"+attributes.getQName(3) + "is : " + attributes.getValue(3)+"\n"+attributes.getQName(4) + "is : " + attributes.getValue(4)+"\n"+attributes.getQName(5) + "is : " + attributes.getValue(5)+"\n"+attributes.getQName(6) + "is : " + attributes.getValue(6)); Organization org=new Organization(); org.id=Integer.parseInt( attributes.getValue(0)); org.name=attributes.getValue(1); org.no=attributes.getValue(2); org.innerno=attributes.getValue(3); org.superiororg=Integer.parseInt( attributes.getValue(4)); org.virflag=Integer.parseInt( attributes.getValue(5)); org.status=Integer.parseInt( attributes.getValue(6)); // System.out.println(org.toString()); orgList.add(org); } if (attributes.getLength() > 0) { System.out.println(attributes.getLength()+" :attributes length"); this.attributes = attributes; this.hasAttribute = true; } if (qName.equals("position")) { System.out.println("********************************"); System.out.println(" position :"); System.out.println("********************************"); System.out.println(attributes.getQName(0) + " is : " + attributes.getValue(0)+"\n"+attributes.getQName(1) + "is : " + attributes.getValue(1)+"\n"+attributes.getQName(2) + "is : " + attributes.getValue(2)+"\n"+attributes.getQName(3) + "is : " + attributes.getValue(3)); Position pos=new Position(); pos.setId(Integer.parseInt( attributes.getValue(0))); pos.setName(attributes.getValue(1)); pos.setNo(( attributes.getValue(2))); pos.setOwner(attributes.getValue(3)); posList.add(pos); } if (qName.equals("org-pos")) { System.out.println("********************************"); System.out.println(" org-pose :"); System.out.println("********************************"); System.out.println(attributes.getQName(0) + " is : " + attributes.getValue(0)+"\n"+attributes.getQName(1) + "is : " + attributes.getValue(1)); Org_pos org_pos=new Org_pos(); org_pos.setOrg_id(Integer.parseInt(attributes.getValue(0))); org_pos.setPos_id(Integer.parseInt(attributes.getValue(1))); org_posList.add(org_pos); } } public void endElement(String uri, String localName, String qName) throws SAXException { // if (hasAttribute && (attributes != null)) { // for (int i = 0; i < attributes.getLength(); i++) { // System.out.println(attributes.getQName(0) // + " and its value is : " + attributes.getValue(0)); // } // } } // public void characters(char[] ch, int start, int length) // throws SAXException { // System.out.println((new String(ch, start, length))+" :here"); // } public List<Position> getPosList() { return posList; } public void setPosList(List<Position> posList) { this.posList = posList; } public List<Org_pos> getOrg_posList() { return org_posList; } public void setOrg_posList(List<Org_pos> org_posList) { this.org_posList = org_posList; } public List<Organization> getOrgList() { return orgList; } public void setOrgList(List<Organization> orgList) { this.orgList = orgList; } }
最后,写出来程序入口即可
SaxParse.java
package parseXML; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.SAXException; public class SaxParse { /** * 采用SAX解析 */ public SaxParse() { SAXParserFactory saxfac = SAXParserFactory.newInstance(); try { SAXParser saxparser = saxfac.newSAXParser(); InputStream is = new FileInputStream( "C:\\workspace\\Lab\\src\\parseXML\\rbac.xml"); ParseOrg parseOrg=new ParseOrg(); saxparser.parse(is, parseOrg);//重点 /** * 全部存到list里了 */ List<Organization> orgList=new ArrayList<Organization>(); orgList=parseOrg.getOrgList(); for(int i=0;i<orgList.size();i++){ System.out.println(orgList.get(i)+" : orglist"); } /** * 全部存到list里了 */ List<Position> posList=new ArrayList<Position>(); posList=parseOrg.getPosList(); for(int i=0;i<posList.size();i++){ System.out.println(posList.get(i)+" : posList"); } /** * 全部存到list里了 */ List<Org_pos> org_posList=new ArrayList<Org_pos>(); org_posList=parseOrg.getOrg_posList(); for(int i=0;i<org_posList.size();i++){ System.out.println(org_posList.get(i)+" : org_posList"); } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { new SaxParse(); } }
总结:功能已经实现...输出也很漂亮...当然只针对Organization进行了处理..剩下两个的输出样式不再啰嗦了..
输出结果:
******************************** Organization : ******************************** id is : 1 nameis : 华迪 nois : A0 innernois : 8790-C9B2-7B08-46FD-A4F8-4157-AD25-5F7B superiororgis : 0 virflagis : 0 statusis : 0 7 :attributes length ...... ******************************** position : ******************************** id is : 1 nameis : 用户 nois : A1.1 owneris : 4 :attributes length ..... ******************************** org-pose : ******************************** orgid is : 2 posidis : 1 2 :attributes length
上述结果省略了很多...
具体效果还是执行一下程序,从控制台观看吧...
发表评论
-
12个国外的免费VPN代理
2011-02-09 00:27 1657VPN(Virtual PrivateNetwork)虚拟专用 ... -
Java 加载Properties文件的六种方式
2011-02-08 22:31 9781。使用java.util.Properties类的load( ... -
【转载】2010年国内开源状况
2011-01-25 09:35 11112010 或许可以称之为中国互联网企业回馈开源领域的试水之年。 ... -
MySQL中Text, MeduimText, LongText在Hibernate中的设置
2010-12-01 15:59 6196在Hibernate的配置中,我目前是采用Annotation ... -
Axis2 根据wsdl制作客户端程序
2010-11-11 00:24 2410package test; import org.a ... -
让BN全部头像可以使用
2010-10-20 19:57 994http://hi.baidu.com/kabian/blog ... -
BN战绩房和统计信息
2010-10-20 19:55 954简单介绍参考:http://hi.baidu.com/lida ... -
BN搭建全过程
2010-10-20 00:19 11251. 官网下载 http://pvpgn.berlios.de ... -
Ubuntu下配置出现error: Cannot find MySQL header files 的解决
2010-10-19 23:25 1116apt-get install libmysqlclient1 ... -
JSTL中if/else使用
2010-09-22 23:49 6059<c:forEach var="i&quo ... -
org.apache.lucene.analysis.TokenStream.incrementToken()Z 错误
2010-08-26 16:26 3961org.apache.lucene.analysis.Toke ... -
msn 80048820 错误,最佳解决办法
2010-08-24 10:04 1286在Internet选项的高级里 清除“检查服务器证书吊销”复 ... -
搭建svn
2010-08-16 18:47 1513环境 ubuntu 10.04 1. sudo apt-ge ... -
防止sshd暴力破解密码工具
2010-07-29 15:56 1212今天逛别人javaeyeblog的时候无意间发现的工具 de ... -
Velocity 解析多层Map
2010-07-15 18:11 2254针对Map<String,Map<String,S ... -
安装单机模式hadoop的流程
2010-07-12 23:33 2439安装环境: Ubuntu 9.10 hadoop 0.20.2 ... -
Velocity 遍历Map类型,List类型
2010-07-06 14:50 2960折腾个velocity的显示问题折腾了一天.. 一.遍历个m ... -
Tokyo Tyrant 简单使用
2010-06-25 16:39 1331(1)、写数据,将数据“value”写入到“key”中: cu ... -
扩大linux文件 描述符
2010-06-25 16:33 770如果大量的客户端访问ttserver,请确保文件描述符够用。 ... -
curl使用简介---转载
2010-06-25 15:04 1517Curl是一个很强大的http ...
相关推荐
一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml文件的实例
以下是一个使用SAX解析XML文件的基本步骤: 1. **创建解析器**: 首先,我们需要创建一个SAX解析器实例。在Java中,这通常通过`SAXParserFactory`类完成。设置解析器属性,然后调用`newSAXParser()`方法获取`...
以下是使用SAX解析XML文件的步骤: 1. 引入依赖:在Android项目中,通常需要添加`xmlpull`库,它包含了SAX解析器。可以在`build.gradle`文件中添加依赖: ``` implementation 'xpp3:xpp3:1.1.4c' ``` 2. 创建...
使用SAX解析XML文件的基本步骤如下: 1. **导入库**:首先需要导入`org.xml.sax`包下的相关类,如`SAXParserFactory`,`SAXParser`和`DefaultHandler`。 2. **创建解析工厂**:使用`SAXParserFactory.newInstance()`...
**SAX解析XML的基本原理:** SAX解析器以流式的方式读取XML文档,当遇到文档的各个元素时,会触发相应的事件,如开始文档、开始元素、结束元素、字符数据等。程序员通过实现SAX解析器的回调接口来处理这些事件,从而...
总结来说,"saxloadxml"项目提供了使用SAX解析XML文件的一个实例,可以帮助开发者了解如何利用SAX解析器处理XML文档,尤其是在性能和内存使用方面有较高要求的情况下。通过学习和实践这个项目,你可以提升处理XML...
### 使用SAX解析XML文件详解 #### 一、XML与SAX简介 XML(Extensible Markup Language,可扩展标记语言)是一种用于标记电子文件使其具有结构性的标记语言,旨在克服HTML的一些不足,使得数据能够被不同系统间共享...
下面是一个SAX解析XML的示例(有点长,因为详细注解了SAX事件处理的所有方法),SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。下面的例子可能...
本示例将详细解释如何在Java中使用SAX解析XML文档,并通过注释进行详细说明。 首先,我们需要引入SAX解析器的依赖库,通常这可以通过在项目构建配置中添加JAXB或Xerces实现来实现。 ```java // 引入必要的库,如...
要使用SAX解析XML文件,我们需要遵循以下步骤: 1. **创建解析器**: 首先,我们需要创建一个SAX解析器。Android提供了一个内置的`DefaultHandler`类,我们可以继承它并重写其中的方法来处理解析过程中遇到的事件。 ...
首先,让我们了解一下SAX解析XML的基本流程。当SAX解析器读取XML文件时,它会按照文档顺序触发一系列事件,这些事件对应于ContentHandler接口中定义的方法。以下是ContentHandler接口的一些关键方法: 1. `start...
下面将详细介绍SAX解析XML文件的基本原理、工作流程以及在Android环境下如何实现。 **SAX解析的基本原理:** SAX解析器在读取XML文档时会触发一系列的事件,如开始文档、结束文档、开始元素、结束元素、字符数据等...
以下是使用Servlet和SAX解析XML的基本步骤: 1. **创建Servlet**:首先,你需要创建一个Servlet类,继承HttpServlet,并重写doGet或doPost方法,因为XML解析通常发生在HTTP请求处理中。 2. **添加SAX解析器依赖**...
最后,使用`saxParser.parse()`方法解析XML文件并传递我们的处理器。 在实际应用中,根据需求,你可能需要在处理器方法内进行更复杂的数据处理,例如存储数据、计算或验证。SAX解析器允许你在不消耗大量内存的情况...
- `xmlSAXPaserDemo`可能是一个包含示例代码的Android项目,用于演示如何实际使用SAX解析XML文件。 - 项目中可能包括网络请求模块、SAX解析器处理类以及展示解析结果的UI部分。 通过以上步骤,开发者可以在...
结合上述信息,我们可以创建一个示例程序,使用SAX解析XML文件,并对从中提取的id进行冒泡排序: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers....
以下是一个简单的SAX解析XML文件的Java代码示例: ```java import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler;...
Java中,可以使用`SAXParserFactory`来生成`SAXParser`,然后调用`parse()`方法解析XML文件。例如: ```java SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory....