xml解析的四种方式
待解析的xml文件
<?xml version="1.0" encoding="UTF-8"?>
<user>
<name>admin</name>
<sex>123</sex>
<age>123</age>
<name>admin</name>
<sex>123</sex>
<age>123</age>
</user>
第一种方式sax 需要自己处理
文件1 package com.norteksoft.xml;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
public class ParseUserXml {
private static String XMLPATH ="";
private static ParseUserXml p=new ParseUserXml();
private ParseUserXml()
{
}
public static ParseUserXml getInstance()
{
XMLPATH =p.getClass().getResource("UserInfo.xml").getPath();
System.out.println("filePath:=="+XMLPATH);
System.out.println("\n");
return p;
}
public String pasrseXML() throws ParserConfigurationException,
SAXException, IOException
{
File xmlfile = new File(XMLPATH);
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(false);
SAXParser saxParse = factory.newSAXParser();
// XmlHandler xmlHandler=new XmlHandler(user);
saxParse.parse(xmlfile, new SaxXmlHandler());
// System.out.println("返回值为:\n"+xmlHandler.getUser());
return null;
}
}
文件2
package com.norteksoft.xml;
import java.util.Stack;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SaxXmlHandler extends DefaultHandler
{
Stack tags=new Stack();
public void startDocument() throws SAXException
{
System.out.println("~~~~~~~~~开始解析文档~~~~~~~~~~~~~");
super.startDocument();
}
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException
{
System.out.println("-----开始解析"+qName+"----");
tags.push(qName);
super.startElement(uri, localName, qName, attributes);
}
public void characters(char[] ch, int start, int length) throws SAXException
{
String value=new String(ch,start,length);
String tag=(String) tags.peek();
if(tag.equals("name"))
{
System.out.println("name="+value);
}
else if (tag.equals("age"))
{
System.out.println("age="+value);
}
else if(tag.equals("sex"))
{
System.out.println("sex="+value);
}
else
{
System.out.println(";value="+";"+tag+"没有匹配到!");
}
super.characters(ch, start, length);
}
public void endElement(String uri, String localName, String qName) throws SAXException
{
System.out.println("-----结束解析"+qName+"----");
tags.pop();
super.endElement(uri, localName, qName);
}
public void endDocument() throws SAXException
{
System.out.println("~~~~~~~~~结束解析文档~~~~~~~~~~~~~");
super.endDocument();
}
}
方式2:dom 解析
package com.norteksoft.xml;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class MyDomXmlReader
{
static User[] users;
public MyDomXmlReader()
{
super();
}
private static void parseXmlWithEception() throws ParserConfigurationException, SAXException, IOException
{
URL url=MyDomXmlReader.class.getResource("UserInfo.xml");
File file=new File(url.getPath());
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document doc =builder.parse(file);
NodeList nodes=doc.getElementsByTagName("user");
users=new User[nodes.getLength()];
String name=null;
String age=null;
String sex=null;
System.out.println("begin");
for(int i=0;i<nodes.getLength();i++)
{
System.out.println("i===="+i+"-------");
NodeList nl=((Node)nodes.item(i)).getChildNodes();
for(int j=0;j<nl.getLength();j++)
{
System.out.println("j=="+j+"\n "+nl.item(j).getNodeName());
}
// String temp= ((Node)nodes.item(i)).getChildNodes().getLength()+";";
// System.out.println("temp====="+temp);
name=doc.getElementsByTagName("name").item(i).getFirstChild().getNodeValue();
// System.out.println("name="+name);
age=doc.getElementsByTagName("age").item(i).getFirstChild().getNodeValue();
// System.out.println("age="+age);
sex=doc.getElementsByTagName("sex").item(i).getFirstChild().getNodeValue();
// System.out.println("sex="+sex);
users=new User(age,name,sex);
}
System.out.print("end");
}
public static void parseXml()
{
try
{
parseXmlWithEception();
}catch (Exception e)
{
e.printStackTrace();
}
}
public static User[] returnValue()
{
parseXml();
return users;
}
}
方式3: JDom
package com.norteksoft.xml;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
public class MyJDomXml
{
public MyJDomXml()
{
super();
}
public static void parseXmlThowException() throws JDOMException, IOException
{
URL url=MyJDomXml.class.getResource("UserInfo.xml");
File file=new File(url.getPath());
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(file);
Element root = doc.getRootElement();
List allChildren = root.getChildren();
for(int i=0;i<allChildren.size();i++)
{
Element foo=(Element) allChildren.get(i);
System.out.println(foo.getName()+"==="+foo.getName());
System.out.println("name="+foo.getChild("name").getText());
System.out.println("age="+foo.getChild("age").getText());
System.out.println("sex="+foo.getChild("sex").getText());
}
}
public static void parseXml()
{
try {
parseXmlThowException();
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
方式4 dom4j
package com.norteksoft.xml;
import java.io.File;
import java.net.MalformedURLException;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class MyDom4JXmlReader
{
public MyDom4JXmlReader()
{
super();
}
private static void parseXmlThrowException() throws MalformedURLException, DocumentException
{
String path=MyDom4JXmlReader.class.getResource("UserInfo.xml").getPath();
File f = new File(path);
SAXReader reader = new SAXReader();
Document doc = reader.read(f);
Element root=doc.getRootElement();
Element foo;
List list=root.elements();
for(int i=0;i<list.size();i++)
{
foo=(Element) list.get(i);
System.out.println("name="+foo.elementText("name"));
System.out.println("age="+foo.elementText("age"));
System.out.println("sex="+foo.elementText("sex"));
}
/*for(Iterator it= root.elementIterator("user");it.hasNext();)
{
foo=(Element) it.next();
System.out.println("name="+foo.elementText("name"));
System.out.println("age="+foo.elementText("age"));
System.out.println("sex="+foo.elementText("sex"));
}*/
}
public static void praseXml()
{
try {
parseXmlThrowException();
} catch (MalformedURLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DocumentException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
分享到:
相关推荐
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件、文档存储等领域。...在实际应用中,开发者应根据项目需求,权衡性能、易用性和资源消耗,选择最适合的XML解析方式。
XML的四种解析方式参考文档 自学者可以参考
选择哪种XML解析方式取决于具体的应用场景和需求。如果需要处理小型到中型的XML文件,并且需要随机访问和修改文档内容,那么DOM是一个好选择。对于大型文件或者实时数据流处理,SAX是更好的选择。JDOM和DOM4J则在...
在Java中,处理XML有四种主要的解析方式:DOM、SAX、DOM4J和JDOM。每种方法都有其特性和适用场景,下面将详细对比和介绍这四种解析方式。 1. DOM(Document Object Model) DOM是一种树形结构的API,它将整个XML...
### C#中的XML解析方式 #### 1. XML Text Reader(流式解析) - **简介**:在.NET框架中,`XMLTextReader`是一种高效的流式XML解析器,适用于处理大型XML文档或当只需要读取文档的部分内容时。 - **特点**: - **...
本文将详细介绍XML解析文件的两种主要方式:SAX(Simple API for XML)和DOM(Document Object Model)。 **1. DOM解析** DOM解析方式是将整个XML文档加载到内存中,构建一个树形结构,称为DOM树。这个树的每个...
易语言XML解析是编程领域中的一个重要主题,尤其对于使用易语言进行开发的程序员来说,理解并掌握XML(可扩展标记语言)的解析方法是至关重要的。XML作为一种结构化数据存储和交换格式,广泛应用于网络通信、配置...
本文将详细讲解四种解析XML文件的方法,旨在帮助初学者更好地理解和掌握XML处理技术。 1. DOM解析器(Document Object Model) DOM解析器将整个XML文档加载到内存中,构建一个树形结构,称为DOM树。这个方法的优点...
java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析...
JDOM是专门为Java设计的XML解析库,提供了与DOM类似的功能,但使用了更直观的Java API。JDOM比DOM更轻量级,且易于使用,适合小型到中型的XML处理任务。然而,由于它不遵循标准的DOM API,可能限制了与其他DOM兼容库...
在进行XML解析时,除了选择合适的API,还应关注性能优化、错误处理和安全性。例如,避免使用可能导致内存溢出的DOM解析大文件,确保SAX和StAX的事件处理器设计得高效,以及防止XML注入攻击等安全问题。 总结,Java...
本篇文章将详细探讨XML的三种主要解析方式:DOM(Document Object Model)、SAX(Simple API for XML)和PULL(Pull Parsing)。 1. DOM解析: DOM解析器将整个XML文档加载到内存中,创建一个树形结构的文档对象...
本篇将详细介绍Java解析XML的四种常见方法,帮助你更好地理解和应用这些技术。 1. DOM(Document Object Model)解析 DOM解析器将整个XML文档加载到内存中,形成一个树形结构,称为DOM树。这种方式适合小型XML文件...
本文将深入探讨XML的四种常见解析方式——DOM、SAX、StAX和JDOM,以及它们各自的优缺点。 1. DOM(Document Object Model)解析器: DOM解析器将整个XML文档加载到内存中,构建一个树形结构,允许开发者通过节点...
在LabVIEW(Laboratory Virtual Instrument Engineering Workbench)这个强大的图形化编程环境中,XML解析器是处理和操作XML数据的关键工具。本示例主要展示了如何在LabVIEW中实现XML文件的加载、保存和解析。 首先...
XML(Extensible Markup Language)可拓展标记语言,它与HTML一样,都是SGML...在Android下有三种方式解析XML,分别为SAX、DOM、PULL;它们有各自的特点,在网络编程中会经常使用,根据实际情况选择哪一种解析方式。
本篇将详细探讨Android中的三种XML解析方式:DOM解析、SAX解析和Pull解析。 1. DOM解析(Document Object Model) DOM解析器会将整个XML文档加载到内存中,构建一个树形结构,称为DOM树。这种解析方式的优点是能够...
总之,XML解析是处理XML数据的关键步骤,DOM和SAX是两种主要的解析方式,各有优缺点。Java提供了强大的XML处理库,使得在Java项目中使用XML变得简单高效。无论是解析配置文件、交换数据还是构建复杂的XML结构,理解...