dom4j和sax解析xml

合集下载

java_Dom4j解析XML详解

java_Dom4j解析XML详解

学习:Dom4j1、DOM4J简介DOM4J是 出品的一个开源XML 解析包。

DOM4J应用于Java 平台,采用了Java 集合框架并完全支持DOM,SAX 和JAXP。

DOM4J 使用起来非常简单。

只要你了解基本的XML-DOM 模型,就能使用。

Dom:把整个文档作为一个对象。

DOM4J 最大的特色是使用大量的接口。

它的主要接口都在org.dom4j里面定义:接口之间的继承关系如下:interface ng.Cloneableinterface org.dom4j.Nodeinterface org.dom4j.Attributeinterface org.dom4j.Branchinterface org.dom4j.Documentinterface org.dom4j.Elementinterface org.dom4j.CharacterDatainterface org.dom4j.CDATAinterface mentinterface org.dom4j.Textinterface org.dom4j.DocumentTypeinterface org.dom4j.Entityinterface org.dom4j.ProcessingInstruction2、XML文档操作12.1、读取XML文档:读写XML文档主要依赖于org.dom4j.io包,有DOMReader和SAXReader两种方式。

因为利用了相同的接口,它们的调用方式是一样的。

public static Docum ent load(String filenam e) {Document docum ent =null;try {SAXReader saxReader = new SAXReader();docum ent =saxReader.read(new File(filename)); //读取XML文件,获得docum ent 对象} catch (Exception ex) {ex.printStackTrace();}return docum ent;}或public static Docum ent load(URL url) {Document docum ent =null;try {SAXReader saxReader = new SAXReader();docum ent =saxReader.read(url); //读取XML文件,获得docum ent对象} catch (Exception ex) {ex.printStackTrace();}return docum ent;}//读取指定的xml文件之后返回一个Document对象,这个对象代表了整个XML文档,用于各种Do m运算。

XML解析原理

XML解析原理

DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document document=builder.parse(xml路径);
NodeList list=document.getElementByTagName(XML文档中的标签元素(第一个根节点或是子节点));
Node node=list.item(0);
String content=node.getTextContent();
System.out.println(content);
XML编程(CRUD)-----create read update delete
XML解析技术概述
XML解析方式分为两种:dom和sax
dom:(Document Object Model,即文档对象模型)是W3C组织推荐的解析XML的一种方式
sax:(Simple API for xml)不是官方标准,但他是XML社区事实上的标准,几乎所有的XML解析器都支持他
JAXP
JAXP开发包是J2SE的一部分,它由javax.xml、org.w3c.dom、org.xml.sax包及其子包组成
在Java.xml.parsers包中,定义了几个工厂类,程序员调用这些工厂,可以得到XML文档的DOM
或SAX的解析器,从而实现对XML文档的解析 Biblioteka 读取XML文档中的值代码:
XML解析开发包:Jaxp(sun) Jdom、dom4j
dom和sax解析方法的区别

扣丁学堂_Java_17_XML

扣丁学堂_Java_17_XML

课程大纲1、什么是XML2、XML的用途3、DOM XML解析4、SAX解析XML5、JDOM解析XML6、DOM4J解析XML7、通过对象生成XML文件8、各种解析方法比较什么是1、什么是XMLp g gXML(Extensible Markup Language 可扩展标记语言),XML是一个以文本来描述数据的文档。

个XML文档示例:一个<?xml version="1.0" encoding="UTF‐8"?><person><teacher id1>id="1"><name>老郭</name><desc>一个成熟稳重有魄力的人desc>/teacher</teacher><teacher id="2"><name>威哥</name>个快乐风有内的技术男/<desc>一个快乐风趣有内涵的技术男</desc></teacher></person>2、XML的用途XML技术的用途:(1)充当显示数据(以XML充当显示层)(2)存储数据(存储层)的功能(3)以XML描述数据,并在联系服务器与系统的其余部分之间传递。

描述数据并在联系服务器与系统的其余部分之间传递从某种角度讲,是数据封装和消息传递技术XML是数据封装和消息传递技术。

3、DOM解析XMLJAVA 解析XML 通常有两种方式,DOM 和SAXDOM:Document Object Model(文档对象模型)DOM的特性:定义一组Java 接口,基于对象,与语言和平台无关将XML 文档表示为树,在内存中解析和定义组J接口基于对象与语言和平台无关将文档表示为树在内存中解析和存储XML 文档,允许随机访问文档的不同部分。

dom4j用法

dom4j用法

dom4j用法dom4j是一个开源的JavaXML解析库,用于解析XML文档并提供API来操作XML元素和属性。

它可以轻松地读取、分析和生成XML文件。

dom4j支持使用XPath表达式来访问XML文档中的节点和属性。

XPath是一种用于在XML文档中定位节点的语言。

dom4j还提供了一些高级功能,如XML命名空间的支持和DTD验证。

使用dom4j可以轻松地解析XML文档,例如:```SAXReader reader = new SAXReader();Document document = reader.read(newFile('path/to/xml/file.xml'));Element root = document.getRootElement();List<Element> elements = root.elements();for (Element element : elements) {//访问元素}```在上面的代码中,我们使用SAXReader类读取XML文档,并获取根元素。

然后,我们可以使用getRootElement()方法获取XML文档的根元素,并使用elements()方法获取根元素的所有子元素。

除了解析XML文档外,dom4j还提供了API来创建新的XML文档。

例如:```Document document = DocumentHelper.createDocument();Element root = document.addElement('root');Element child = root.addElement('child');child.addAttribute('attribute', 'value');child.setText('text');```在上面的代码中,我们使用DocumentHelper类创建一个新的XML 文档,并添加根元素和一个子元素。

DOM4J详细教程

DOM4J详细教程

DOM4J详细教程
答:
DOM4J是一个Java XML API,它可以用来快速、高效地读取、生成和
修改XML数据。

它支持XPath的完整实现,支持Java5的新功能,并有一
个强大的可扩展的SAX集成,还支持JAXP 1.3、通过支持性能良好的DOM、SAX以及JAXP的结合,它可以提供XML文档的可用性。

1.使用DOM4J
使用DOM4J解析XML文档的主要步骤如下:
(1)创建一个Document对象,该文档对象将描述整个XML文档。

(2)创建一个XMLReader对象,该对象使用DOM4J的API来解析
XML文档。

(3)创建一个DocumentHandler对象,该对象用来处理XML文档内容,如处理XML文档的根元素和子元素等。

(4)使用XMLReader的parse方法来将Document对象与DocumentHandler对象相关联,以便允许访问Document对象的内容。

(5)执行任何必要的处理来解析XML文档中的元素。

2.DOM4J技术
(1)XML读取
DOM4J提供了一组API,可以在处理XML文档时使用。

DOM4J的
org.dom4j.io.XMLReader类可以解析XML文档,将其转换为DOM4J的
Document对象。

它可以使用InputSource或java.io.Reader对象的任何对象,以确保可以将XML文档从字符串、文件或URL读取。

(2)XML写入
(3)XPath查询。

xml 格式 解析

xml 格式 解析

xml 格式解析XML格式解析是一种常见的数据解析方法,它可以将XML格式的数据转换为可供程序使用的数据结构。

XML即可扩展标记语言(eXtensible Markup Language),它被广泛应用于数据交换和存储。

下面将介绍XML格式解析的原理和常用的解析方法。

XML格式解析的原理是通过读取XML文件并识别其中的标签、属性和文本内容,将其转换为内存中的数据结构,以便程序进行进一步处理。

XML文件由起始标签、结束标签、属性和文本内容组成。

解析器会根据这些组成部分对XML文档进行解析。

常用的XML格式解析方法有两种:DOM解析和SAX解析。

DOM(文档对象模型)解析是一种将整个XML文档加载到内存中,并构建一个XML树结构的解析方法。

它可以方便地对XML文档进行增删改查操作。

DOM解析器会先将整个XML文档加载到内存中,然后构建一个树状结构,通过遍历树状结构来访问和操作XML文档的节点。

SAX(简单 API for XML)解析是一种基于事件驱动的解析方法。

它边读取XML文档边解析,并在读取到XML文档的不同部分时触发相应的事件。

相比DOM解析,SAX解析更加高效,特别适用于大型XML文件的解析。

SAX解析器会逐行读取XML文档,当遇到起始标签、结束标签或文本内容时触发相应的事件,并通过事件处理程序来处理这些事件。

选择使用DOM解析还是SAX解析取决于具体的需求。

如果需要对XML文档进行多次操作或查询,DOM解析更方便。

但是,如果处理大型XML文件或只需一次性读取XML数据,SAX解析更高效。

总之,XML格式解析是处理XML数据的重要技术。

通过DOM解析和SAX 解析,我们可以将XML格式的数据转换为程序可以处理的数据结构,实现数据的读取、分析和操作。

xml文件解析方法

xml文件解析方法

xml文件解析方法XML文件解析方法引言:XML(可扩展标记语言)是一种用于存储和传输数据的标记语言,它具有良好的可读性和灵活性,被广泛应用于数据交换和配置文件等领域。

在处理XML文件时,解析是必不可少的环节。

本文将介绍几种常用的XML文件解析方法,包括DOM、SAX和StAX。

一、DOM解析方法DOM(文档对象模型)是一种将整个XML文件以树形结构加载到内存中的解析方法。

DOM解析器将XML文件解析为一个树状结构,通过遍历节点来获取和操作XML文件中的数据。

DOM解析方法的优点是易于理解和使用,可以随机访问XML文件中的任意节点,但缺点是占用内存较大,不适用于大型XML文件的解析。

1. 创建DOM解析器对象:使用标准的Java API,可以通过DocumentBuilderFactory类来创建DOM解析器对象。

2. 加载XML文件:通过DOM解析器对象的parse()方法加载XML文件,将其转化为一个树形结构。

3. 遍历节点:使用DOM解析器对象提供的方法,如getElementsByTagName()、getChildNodes()等,可以遍历XML文件中的各个节点,获取节点的名称、属性和文本内容等信息。

4. 获取节点数据:通过节点对象提供的方法,如getNodeName()、getTextContent()等,可以获取节点的名称和文本内容。

二、SAX解析方法SAX(简单API for XML)是一种基于事件驱动的XML解析方法。

在SAX解析过程中,解析器顺序读取XML文件,当遇到节点开始、节点结束或节点文本等事件时,会触发相应的回调方法。

相比于DOM 解析方法,SAX解析方法具有内存占用小、解析速度快的优点,但缺点是无法随机访问XML文件中的节点。

1. 创建SAX解析器对象:使用标准的Java API,可以通过SAXParserFactory类来创建SAX解析器对象。

2. 实现事件处理器:自定义一个事件处理器,实现SAX解析器提供的DefaultHandler类,并重写相应的回调方法,如startElement()、endElement()和characters()等。

xml的四种解析方法及源代码

xml的四种解析方法及源代码

xml的四种解析方法及源代码(SAX、DOM、JDOM、DOM4J)第二种:DOM解析DOM中的核心概念就是节点。

DOM在分析XML文档时,将将组成XML文档的各个部分(元素、属性、文本、注释、处理指令等)映射为一个对象(节点)。

在内存中,这些节点形成一课文档树。

整棵树是一个节点,树中的每一个节点也是一棵树(子树),可以说,DOM就是对这棵树的一个对象描述,我们通过访问树中的节点来存取XML文档的内容。

PS:属性节点是附属于元素的,不能被看做是元素的子节点,更不能作为一个单独的节点DOMPrinter.javaJava代码import org.w3c.dom.Document;import dNodeMap;import org.w3c.dom.Node;import .apache.xerces.internal.parsers.DOMParser;public class DOMPrinter{public static void main(String[] args){try{/** *//** 获取Document对象 */DOMParser parser = new DOMParser();parser.parse("db.xml");Document document = parser.getDocument();printNode(document);} catch (Exception e){e.printStackTrace();}}public static void printNode(Node node){short nodeType=node.getNodeType();switch(nodeType){case Node.PROCESSING_INSTRUCTION_NODE://预处理指令类型 printNodeInfo(node);break;case Node.ELEMENT_NODE://元素节点类型printNodeInfo(node);printAttribute(node);break;case Node.TEXT_NODE://文本节点类型printNodeInfo(node);break;default:break;}Node child=node.getFirstChild();while(child!=null){printNode(child);child=child.getNextSibling();}}/** *//*** 根据节点类型打印节点* @param node*/public static void printNodeInfo(Node node){if (node.getNodeType() == Node.ELEMENT_NODE){System.out.println("NodeName: " + node.getNodeName()); }else if (node.getNodeType() == Node.TEXT_NODE){String value = node.getNodeValue().trim();if (!value.equals(""))System.out.println("NodeValue: " + value);elseSystem.out.println();}else{System.out.println(node.getNodeName()+" : "+node.getNodeValu e());}}/** *//*** 打印节点属性* @param aNode 节点*/public static void printAttribute(Node aNode){NamedNodeMap attrs = aNode.getAttributes();if(attrs!=null){for (int i = 0; i < attrs.getLength(); i++){Node attNode = attrs.item(i);System.out.println("Attribute: " + attNode.getNodeName() + "=\"" + attNode.getNodeValue()+"\"");}}}DOM生成XML文档:DOMCreateExample.javaJava代码import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.w3c.dom.Element;import .apache.xml.internal.serialize.XMLSerializer;public class DOMCreateExample{public static void main(String[] args) throws ParserConfiguratio nException{//DOMImplementation domImp = DOMImplementationImpl.getDOMImple mentation();DocumentBuilderFactory builderFact = DocumentBuilderFactory.ne wInstance();DocumentBuilder builder = builderFact.newDocumentBuilder();Document doc = builder.newDocument();//Document doc = domImp.createDocument(null, null, null);Element root = doc.createElement("games");Element child1 = doc.createElement("game");child1.appendChild(doc.createTextNode("Final Fantasy VII")); child1.setAttribute("genre", "rpg");root.appendChild(child1);doc.appendChild(root);XMLSerializer serial;try{serial = new XMLSerializer(new FileOutputStream("domcreate.x ml"), null);serial.serialize(doc);} catch (FileNotFoundException e1){e1.printStackTrace();} catch (IOException e){e.printStackTrace();}}}第三种JDOM解析JDOM利用了java语言的优秀特性,极大地简化了对XML文档的处理,相比DOM 简单易用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

*************************dom4j实例********************************** package test.xmlAnalyze;import java.io.File;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.OutputStreamWriter;import java.util.Iterator;import java.util.List;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.junit.Ignore;import org.junit.Test;public class XmlOption {@Ignore@Testpublic void addXml() throws Exception{SAXReader reader=new SAXReader();Document doc=reader.read("src/user.xml");Element root=doc.getRootElement();Document doc2 = DocumentHelper.parseText("");//字符串解析成documentElement user = DocumentHelper.createElement("user");root.add(user);Element name = DocumentHelper.createElement("userName");name.setText("xingming2");user.add(name);// 确定格式OutputFormat of = OutputFormat.createPrettyPrint();// 写到控制台//OutputStreamWriter out = new OutputStreamWriter(System.out,"utf-8");//XMLWriter writer = new XMLWriter(new FileWriter(new File("src/user.xml")));FileOutputStream fis = new FileOutputStream("src/user.xml");OutputStreamWriter out = new OutputStreamWriter(fis,"utf-8");XMLWriter writer = new XMLWriter(out,of);writer.write(doc);writer.close();}@Ignore@Testpublic void modify() throws Exception{SAXReader reader=new SAXReader();Document doc=reader.read(new File("src/user.xml"));Element root = doc.getRootElement();for (Iterator it = root.elementIterator();it.hasNext();) {Element ele = (Element) it.next();for(Iterator i = ele.elementIterator();i.hasNext();){Element e = (Element) i.next();if (e.getText().equals("wwww")) {e.setText("ssss");}}}XMLWriter writer = new XMLWriter(new FileWriter(new File("src/user.xml")));writer.write(doc);writer.close();}@Ignore@Testpublic void remove() throws Exception{SAXReader reader=new SAXReader();Document doc=reader.read(new File("src/user.xml"));Element root = doc.getRootElement();for (Iterator it = root.elementIterator();it.hasNext();) {Element ele = (Element) it.next();for(Iterator i = ele.elementIterator();i.hasNext();){Element e = (Element) i.next();if (e.getText().equals("xingming2")) {root.remove(ele);}}}XMLWriter writer = new XMLWriter(new FileWriter(new File("src/user.xml")));writer.write(doc);writer.close();}@Ignore@Testpublic void xpath() throws Exception{SAXReader reader=new SAXReader();Document doc=reader.read(new File("src/user.xml"));// 定位该名字的所有节点List list = doc.selectNodes("//users/user/userName");for (Iterator ite = list.iterator();ite.hasNext();) {Element element = (Element) ite.next();System.out.println(element.getText());}// 找到所有user下属性id的值List attribues = doc.selectNodes("//users/user/@id");for (Iterator ite = attribues.iterator();ite.hasNext();) {Attribute attribute= (Attribute) ite.next();System.out.println(attribute.getValue());if (attribute.getValue().equals("001")) {}}XMLWriter writer = new XMLWriter(new FileWriter(new File("src/user.xml")));writer.write(doc);writer.close();}}******************************sax实例******************************** package test.xmlAnalyze;import java.io.InputStream;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.InputSource;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class MyXMLReader extends DefaultHandler {java.util.Stack tags = new java.util.Stack();private String preTag;public MyXMLReader() {}public static void main(String args[]) {long lasting = System.currentTimeMillis();try {SAXParserFactory sf = SAXParserFactory.newInstance();SAXParser sp = sf.newSAXParser();MyXMLReader reader = new MyXMLReader();//sp.parse(new InputSource("data_10k.xml"), reader);InputStream in = MyXMLReader.class.getResourceAsStream("data_10k.xml");sp.parse(in, reader);} catch (SAXException e){//e.printStackTrace();System.out.println(e.getMessage());} catch (Exception e) {e.printStackTrace();}System.out.println("运行时间:" + (System.currentTimeMillis() - lasting)+ "毫秒");}//只执行一次@Overridepublic void startDocument() throws SAXException {System.out.println("****startDocument****");}//没读一个标签都会调该方法@Overridepublic void characters(char ch[], int start, int length)throws SAXException {System.out.println("****characters****");//String tag = (String) tags.peek();if(preTag != null){if (preTag.equals("no")) {System.out.println("车牌号码:" + new String(ch, start, length));}if (preTag.equals("addr")) {String addr = new String(ch, start, length);System.out.println("地址:" +addr);if(addr.contains("号")){throw new SAXException("******终止解析*******");}}}}//读开始标签,之后调characters@Overridepublic void startElement(String uri, String localName, String qName,Attributes attrs) {System.out.println("****startElement****"+attrs.getValue("data"));//tags.push(qName);preTag = qName;}//读结束标签,之后调characters@Overridepublic void endElement(String uri,String localName,String name)throws SAXException { System.out.println("****endElement****");preTag = null;}}==========================================xml文件<?xml version="1.0" encoding="GB2312"?><RESULT><VALUE><NO>A1234</NO><ADDR>四川省XX县XX镇XX路X段XX号</ADDR></VALUE><VALUE><NO>B1234</NO><ADDR>四川省XX市XX乡XX村XX组</ADDR></VALUE></RESULT>需要什么包自己到网上找下吧?==========================================1)DOM(JAXP Crimson解析器)DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。

相关文档
最新文档