XML有三种解析方式
1.Sax解析
2.Pull解析
3.Dom解析
解析的xml
<?xml version="1.0" encoding="UTF-8"?> <Persons> <Person id="1"> <name>再_见孙悟空</name> <age>19</age> </Person> <Person id="2"> <name>AMB</name> <age>19</age> </Person> </Persons>
第一种解析Sax解析
/** * 以事件的形式通知程序,对xml进行解析 * * @author tanlvxu * */ public class Sax_Demo extends DefaultHandler { // 存储单个解析的完整对象 private HashMap<String, String> map = null; // 存储所以对象 private List<HashMap<String, String>> list = null; // 正在解析的元素 private String currentTag = null; // 解析当前元素的值 private String currentValue = null; // 解析当前节点的名称 private String nodeName = null; public Sax_Demo(String nodeName) { this.nodeName = nodeName; } public List<HashMap<String, String>> getList() { return list; } /** * 接收文档开始的通知 */ @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub list = new ArrayList<HashMap<String,String>>() ; } /** * 接收元素开始的通知。 * uri - 名称空间 URI,如果元素没有任何名称空间 URI,或者没有正在执行名称空间处理,则为空字符串。 * localName - 本地名称(不带前缀),如果没有正在执行名称空间处理,则为空字符串。 * qName - 限定的名称(带有前缀),如果限定的名称不可用,则为空字符串。 * attributes - 附加到元素的属性。如果没有属性,则它将是空的 Attributes 对象。 */ @Override public void startElement(String url, String localName, String qName, Attributes attributes) throws SAXException { // TODO Auto-generated method stub if(qName.equals(nodeName)){ map = new HashMap<String, String>() ; } if(attributes!=null && map!=null){ for(int i=0;i<attributes.getLength();i++){ map.put(attributes.getQName(i), attributes.getValue(i)); } } currentTag = qName ; } /** * 接收元素中字符数据的通知。 */ @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub if(currentTag!=null && map!=null){ currentValue = new String(ch, start, length) ; if(currentValue!=null&&!currentValue.trim().equals("")&&!currentValue.trim().equals("\n")){ map.put(currentTag, currentValue) ; } } currentTag = null ; currentValue = null ; } /** * 接收元素结束的通知。 */ @Override public void endElement(String url, String localName, String qName) throws SAXException { // TODO Auto-generated method stub if(qName.equals(nodeName)){ list.add(map) ; map = null ; } } }
通过URL取得InputStream对象
public static InputStream getXML(String path){ InputStream inputStream = null ; try { URL url = new URL(path); if(url != null){ HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection() ; httpURLConnection.setConnectTimeout(3000) ; httpURLConnection.setDoInput(true) ; httpURLConnection.setRequestMethod("GET") ; int code = httpURLConnection.getResponseCode() ; if(code==HttpURLConnection.HTTP_OK){ System.out.println("连接正常!!"); inputStream = httpURLConnection.getInputStream() ; } } } catch (Exception e) { // TODO: handle exception } return inputStream ; }
通过解析inputstream,返回List集合
public static List<HashMap<String,String>> getList(InputStream inputStream,String nodeName){ try { //创建一个解析xml的工厂对象 SAXParserFactory spf = SAXParserFactory.newInstance() ; SAXParser saxParser = spf.newSAXParser() ; Sax_Demo sDemo = new Sax_Demo(nodeName) ; saxParser.parse(inputStream,sDemo) ; inputStream.close() ; return sDemo.getList() ; } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null ; }
三种解析原理其实大致相同,只是在实现上有所不同.下面两种就不写了,直接上源码
下面两种方法解析的xml为
<Games> <Game id="1"> <name>英雄联盟</name> <English_Name>LEAGUEofLEGED</English_Name> </Game> <Game id="2"> <name>刀塔</name> <English_Name>DOTA</English_Name> </Game> </Games>
相关推荐
易语言 xml解析 易语言 xml解析 易语言 xml解析 易语言 xml解析 易语言 xml解析 易语言 xml解析 易语言 xml解析 教程 带源码
解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml
读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好。 TinyXML是一个开源的解析XML的解析库,能够用于C++,...
C# XML解析方式
XML解析、XML生成工具,灵活好用的XML解析器、封装接口简单易用
XML解析技术研究XML解析技术研究XML解析技术研究XML解析技术研究XML解析技术研究
使用dom4j解析XML,用于解析复杂XML,多层镶嵌XML,多层循环xml解析,解析完保存到实体类
LabVIEW XML解析器示例, 包含xml加载,保存,解析等功能
minixml是适合嵌入式系统的xml解析器,支持dom
ios开发,简单的xml解析,亲测可用,自己认真研究研究,不要遇到点问题就放弃。
利用jdom解析复杂xml到bean中: 1.依赖的jar:jdom-1.1.jar,commons-beanutils.1.8.3.jar,commons-logging-1.1.1.jar ...用模板将xml解析 具体可以打断点运行主类:/xml_parse/src/com/vhl/main/StartMain.java,观察
Mini-XML 是一个小型 XML 解析库,您可以使用它来读取应用程序中的 XML 数据文件或字符串,而无需大型非标准库 读取 UTF-8 和 UTF-16 并写入 UTF-8 编码的 XML 文件和字符串。 数据存储在链表树结构中,保留 XML ...
java心电图xml解析源码。
XML 解析XML 解析XML 解析XML 解析XML 解析XML 解析XML 解析
java实现xml解析word文档代码实现,通过解析word书签实现java动态写入word文档。方便使用。
XML解析 很全 一看就懂的东东。。。。。。。。。
rss阅读器与 XML解析 XML RSS 阅读器 Winfom ASP.NET rss阅读器与 XML解析 XML RSS 阅读器 Winfom ASP.NET rss阅读器与 XML解析 XML RSS 阅读器 Winfom ASP.NET rss阅读器与 XML解析 XML RSS 阅读器 Winfom ASP.NET ...
XML解析支持库
C++ XML解析之TinyXML篇
tinyxml解析XML文件