怎么解析XML?解析xml文件的几种技术
本文目录
- 怎么解析XML
- 解析xml文件的几种技术
- XML文档定义有几种形式它们之间有何本质区别解析XML文档有哪几种方式
- xml解析哪几种方法,简要说明下区别
- 如何解析XML文件或字符串
- 在java中解析xml有哪几种方法
- 怎样按要求用Java解析xml
怎么解析XML
string xmlPath = "Demo.xml"XmlDocument _XmlDoc = new XmlDocument();_XmlDoc.Load(xmlPath);//数组长度string num = "";Dictionary<string string> xmlData = new Dictionary<string string>();foreach (XmlNode node in _XmlDoc.ChildNodes){ if(node.Name == "num") num = node.Attributes["n"].Value; if(node.Name == "pdr") xmlData.Add(node.Attributes["t"].Value7395node.Attributes["Q"].Value);}//至此,你的XML解析完毕,字典里保存的是pdr数据,num 变量保存的是数组长度0
解析xml文件的几种技术
.DOM生成和解析XML文档为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。2.SAX生成和解析XML文档为解决DOM的问题,出现了SAX。SAX ,事件驱动。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少;3.DOM4J生成和解析XML文档DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J。4.JDOM生成和解析XML 为减少DOM、SAX的编码量,出现了JDOM;优点:20-80原则,极大减少了代码量。使用场合:要实现的功能简单,如解析、创建等,但在底层,JDOM还是使用SAX(最常用)、DOM、Xanan文档。XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? 答:a: 两种形式 dtd schema,b: 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的根本目的),c:有DOM,SAX,STAX等DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问我之前好像买过相关的课程~ 我找找看
XML文档定义有几种形式它们之间有何本质区别解析XML文档有哪几种方式
XML文档定义分为DTD和Schema两种形式,二者都是对XML语法的约束,其本质区别在于Schema本身也是一个XML文件,可以被XML解析器解析,而且可以为XML承载的数据定义类型,约束能力较之DTD更强大。对XML的解析主要有DOM(文档对象模型,Document Object Model)、SAX(Simple API for XML)和StAX(Java 6中引入的新的解析XML的方式,Streaming API for XML),其中DOM处理大型文件时其性能下降的非常厉害,这个问题是由DOM树结构占用的内存较多造成的,而且DOM解析方式必须在解析文件之前把整个文档装入内存,适合对XML的随机访问(典型的用空间换取时间的策略);SAX是事件驱动型的XML解析方式,它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过事件回调代码来处理XML文件,适合对XML的顺序访问;顾名思义,StAX把重点放在流上,实际上StAX与其他解析方式的本质区别就在于应用程序能够把XML作为一个事件流来处理。将XML作为一组事件来处理的想法并不新颖(SAX就是这样做的),但不同之处在于StAX允许应用程序代码把这些事件逐个拉出来,而不用提供在解析器方便时从解析器中接收事件的处理程序。
xml解析哪几种方法,简要说明下区别
大致有三种比较常用的,dom解析(这种方式会将xml一次性的全部读到内存中,然后生成树状结构,浏览器的解析就是用的这种方式,一般编程语言都支持,但是如果xml文件过大这种方式性能就比较差),sax(simple API for XML)解析这个是sun官方提供的解析标准,只适用于java,是逐行进行解析的,性能相对高一些,相对dom解析,但是写法比较繁琐,不容易理解,第三种是jdom解析,结合了前两种解析方式的优点,写法也比较简单,也容易理解,比较常用,个人推荐这种。具体的例子网上去找找都有。
如何解析XML文件或字符串
package com.huayu;import Java.io.*;import javax.xml.parsers.*;import org.w3c.dom.*;public class Test3 {public static void main(String args){try {//1.创建一个工厂DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();//2.得到解析器DocumentBuilder db=dbf.newDocumentBuilder();//3.//字符串String strTest=“《?xml version=/“1.0/“ encoding=/“gb2312/“?》“+“《company》“+“《person sex=/“male/“》“+“《name》小三子《/name》“+“《email》zhs5555555555555555555@sohu.com《/email》“+“《/person》“+“《person sex=/“male/“》“+“《name》小三子《/name》“+“《email》zhs@sohu.com《/email》“+“《/person》“+“《person sex=/“male/“》“+“《name》小三子《/name》“+“《email》zhs@sohu.com《/email》“+“《/person》“+“《/company》“;//在编程中,字符串从网络传递InputStream is=new ByteArrayInputStream(strTest.getBytes());Document dm=db.parse(is);NodeList nl=dm.getElementsByTagName(“person“);//5.改进将 Node 换成 Element (Element提供了更加丰富的方法,解决不能指定得到某个子节点的问题)//得到第一个人的信息Element el=(Element)nl.item(0);//指定得到某个子节点NodeList nll=el.getElementsByTagName(“email“);//打印name值,这是固定的取法String name=((Element)nll.item(0)).getFirstChild().getNodeValue();System.out.println(“email=“+name);} catch (Exception e) {e.printStackTrace();// TODO: handle exception}}}
在java中解析xml有哪几种方法
(1)DOM解析DOM是html和xml的应用程序接口(API),以层次结构(类似于树型)来组织节点和信息片段,映射XML文档的结构,允许获取和操作文档的任意部分,是W3C的官方标准【优点】①允许应用程序对数据和结构做出更改。②访问是双向的,可以在任何时候在树中上下导航,获取和操作任意部分的数据。【缺点】①通常需要加载整个XML文档来构造层次结构,消耗资源大。【解析详解】①构建Document对象:DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();DocumentBuilder db = bdf.newDocumentBuilder();InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(xml文件);Document doc = bd.parse(is);②遍历DOM对象Document: XML文档对象,由解析器获取NodeList: 节点数组Node: 节点(包括element、#text)Element: 元素,可用于获取属性参数(2)SAX(Simple API for XML)解析流模型中的“推“模型分析方式。通过事件驱动,每发现一个节点就引发一个事件,事件推给事件处理器,通过回调方法完成解析工作,解析XML文档的逻辑需要应用程序完成【优势】①不需要等待所有数据都被处理,分析就能立即开始。②只在读取数据时检查数据,不需要保存在内存中。③可以在某个条件得到满足时停止解析,不必解析整个文档。④效率和性能较高,能解析大于系统内存的文档。【缺点】①需要应用程序自己负责TAG的处理逻辑(例如维护父/子关系等),文档越复杂程序就越复杂。②单向导航,无法定位文档层次,很难同时访问同一文档的不同部分数据,不支持XPath。【原理】简单的说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束时通知事件处理函数(回调函数),进行相应处理,直到文档结束【事件处理器类型】①访问XML DTD:DTDHandler②低级访问解析错误:ErrorHandler③访问文档内容:ContextHandler【DefaultHandler类】SAX事件处理程序的默认基类,实现了DTDHandler、ErrorHandler、ContextHandler和EntityResolver接口,通常做法是,继承该基类,重写需要的方法,如startDocument()【创建SAX解析器】SAXParserFactory saxf = SAXParserFactory.newInstance();SAXParser sax = saxf.newSAXParser();注:关于遍历①深度优先遍历(Depthi-First Traserval)②广度优先遍历(Width-First Traserval)(3)JDOM(Java-based Document Object Model)Java特定的文档对象模型。自身不包含解析器,使用SAX【优点】①使用具体类而不是接口,简化了DOM的API。②大量使用了Java集合类,方便了Java开发人员。【缺点】①没有较好的灵活性。②性能较差。(4)DOM4J(Document Object Model for Java)简单易用,采用Java集合框架,并完全支持DOM、SAX和JAXP【优点】①大量使用了Java集合类,方便Java开发人员,同时提供一些提高性能的替代方法。②支持XPath。③有很好的性能。【缺点】①大量使用了接口,API较为复杂。(5)StAX(Streaming API for XML)流模型中的拉模型分析方式。提供基于指针和基于迭代器两种方式的支持,JDK1.6新特性【和推式解析相比的优点】①在拉式解析中,事件是由解析应用产生的,因此拉式解析中向客户端提供的是解析规则,而不是解析器。②同推式解析相比,拉式解析的代码更简单,而且不用那么多库。③拉式解析客户端能够一次读取多个XML文件。④拉式解析允许你过滤XML文件和跳过解析事件。【简介】StAX API的实现是使用了Java Web服务开发(JWSDP)1.6,并结合了Sun Java流式XML分析器(SJSXP)-它位于javax.xml.stream包中。XMLStreamReader接口用于分析一个XML文档,而XMLStreamWriter接口用于生成一个XML文档。XMLEventReader负责使用一个对象事件迭代子分析XML事件-这与XMLStreamReader所使用的光标机制形成对照。
怎样按要求用Java解析xml
用Java解析xml最常用的是DOM生成和解析XML文档package com.alisoft.facepay.framework.bean; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; /** * * @author hongliang.dinghl * DOM生成与解析XML文档 */ public class DomDemo implements XmlDocument { private Document document; private String fileName; public void init() { try { DocumentBuilderFactory factory = DocumentBuilderFactory .newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); this.document = builder.newDocument(); } catch (ParserConfigurationException e) { System.out.println(e.getMessage()); } } public void createXml(String fileName) { Element root = this.document.createElement(“employees“); this.document.appendChild(root); Element employee = this.document.createElement(“employee“); Element name = this.document.createElement(“name“); name.appendChild(this.document.createTextNode(“丁宏亮“)); employee.appendChild(name); Element sex = this.document.createElement(“sex“); sex.appendChild(this.document.createTextNode(“m“)); employee.appendChild(sex); Element age = this.document.createElement(“age“); age.appendChild(this.document.createTextNode(“30“)); employee.appendChild(age); root.appendChild(employee); TransformerFactory tf = TransformerFactory.newInstance(); try { Transformer transformer = tf.newTransformer(); DOMSource source = new DOMSource(document); transformer.setOutputProperty(OutputKeys.ENCODING, “gb2312“); transformer.setOutputProperty(OutputKeys.INDENT, “yes“); PrintWriter pw = new PrintWriter(new FileOutputStream(fileName)); StreamResult result = new StreamResult(pw); transformer.transform(source, result); System.out.println(“生成XML文件成功!“); } catch (TransformerConfigurationException e) { System.out.println(e.getMessage()); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); } catch (FileNotFoundException e) { System.out.println(e.getMessage()); } catch (TransformerException e) { System.out.println(e.getMessage()); } } public void parserXml(String fileName) { try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document document = db.parse(fileName); NodeList employees = document.getChildNodes(); for (int i = 0; i 《 employees.getLength(); i++) { Node employee = employees.item(i); NodeList employeeInfo = employee.getChildNodes(); for (int j = 0; j 《 employeeInfo.getLength(); j++) { Node node = employeeInfo.item(j); NodeList employeeMeta = node.getChildNodes(); for (int k = 0; k 《 employeeMeta.getLength(); k++) { System.out.println(employeeMeta.item(k).getNodeName() + “:“ + employeeMeta.item(k).getTextContent()); } } } System.out.println(“解析完毕“); } catch (FileNotFoundException e) { System.out.println(e.getMessage()); } catch (ParserConfigurationException e) { System.out.println(e.getMessage()); } catch (SAXException e) { System.out.println(e.getMessage()); } catch (IOException e) { System.out.println(e.getMessage()); } } }
更多文章:
有网的情况下勤学网网页总是打不开怎么办?有没有在勤学网学过的小伙伴,勤学网怎么样,值得购买会员么
2024年7月23日 12:36
传奇世界渡劫飞升怎么玩 渡劫飞升方法流程攻略?梦幻西游渡劫需要飞升和化生吗
2024年5月18日 12:58
i386 和amd64 的意思?为什么ubuntu 64位版本的叫amd64
2023年9月4日 05:40
什么手机软件可以学p图和拍照?你们是怎么学习pr或者剪辑,P图的
2024年7月1日 04:22
美少女战士新版(动画版《美少女战士》一共几部国内引进了几部)
2023年7月26日 06:00
卖萌qq表情包(有哪些比较萌、比较好看的动物表情包QQ或微信上的都可)
2024年6月13日 16:25