网站首页 > java教程 正文
java中比较常见的xml解析主要包括SAXParse、DomParse和Jdom三种,下面介绍具体使用方法。
一、DomParse解析
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class DomParse {
public static void main(String[] args) throws Exception
{
//获取工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
//解析xml
Document doc = db.parse("src/com/sxt/day21/xml_base/ThreeKing.xml");
//根据名字获取所有的子标签集合
NodeList nl = doc.getElementsByTagName("hero");
for(int i = 0;i < nl.getLength();i++){
Node node = nl.item(i);
Element ele = (Element)node;
System.out.println(ele.getAttribute("name"));
System.out.println(ele.getTextContent());
}
}
}
二、SAXParse解析
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SaxParse {
/*xml的解析:
*1.sax解析:
*优点:解析效率高
*缺点:解析步骤麻烦
*2.dom解析:
*优点:解析步骤明确简单
*缺点:浪费效率
*
*/
public static void main(String[] args) throws Exception
{
saxParse();
}
//sax解析
public static void saxParse() throws Exception{
//获取工厂对象
SAXParserFactory spf = SAXParserFactory.newInstance();
//获取解析器对象
SAXParser sp = spf.newSAXParser();
//解析
MyHandler mh = new MyHandler();
sp.parse("src/com/sxt/day21/xml_base/ThreeKing.xml", mh);
List<Hero> list = mh.list;
for (Hero hero : list)
{
System.out.println(hero);
}
}
}
class MyHandler extends DefaultHandler{
List<Hero> list = new ArrayList<Hero>();
Hero hero;
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException
{
if("hero".equals(qName)){
String name = attributes.getValue("name");
String weapon = attributes.getValue("weapon");
hero = new Hero(name,weapon,null);
list.add(hero);
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException
{
if(hero!=null){
String str = new String(ch,start,length);//获取xml中的文本
hero.detail = str.trim();
hero = null;//在当前标签处理完成后,让hero不再指向当前标签的对象
}
}
}
class Hero{
String name;
String weapon;
String detail;
public Hero(String name, String weapon, String detail)
{
super();
this.name = name;
this.weapon = weapon;
this.detail = detail;
}
@Override
public String toString()
{
return "Hero [name=" + name + ", weapon=" + weapon + ", detail=" + detail + "]";
}
}
三、Jdom解析(属于第三方插件,需要导入jdom.jar)
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
public class Jdom2Use {
public static void main(String[] args) throws Exception
{
write();
}
//使用jdom2解析xml
public static void parse() throws Exception{
//生成解析器对象
SAXBuilder sb = new SAXBuilder();
//解析xml
Document doc = sb.build("src/com/sxt/day21/xml_base/ThreeKing.xml");
//获取跟标签
Element ele = doc.getRootElement();
//获取所有子标签的集合
List<Element> list = ele.getChildren();//获取所有country的标签对象
for (Element element : list)
{
List<Element> child = element.getChildren();//获取当前country下的所有hero标签对象
for (Element element2 : child)
{
System.out.println(element2.getAttributeValue("name"));
System.out.println(element2.getText());
}
}
}
//写入xml
public static void write() throws IOException{
//建立Document对象
Document doc = new Document();
//指定根标签
Element root = new Element("DogInfo");
doc.setRootElement(root);
//建立其他标签并嵌入根标签
for (int i = 1; i < 4; i++)
{
Element ele = new Element("dog");
ele.setAttribute("name","dog"+i);
ele.setAttribute("age",i+2+"");
ele.setText("汪汪汪,是第"+i+"只");
root.addContent(ele);
}
//写出xml
XMLOutputter xo = new XMLOutputter(Format.getPrettyFormat());
OutputStream os = new FileOutputStream("src/com/sxt/day21/jdom_stu/dog.xml");
xo.output(doc,os);
os.close();
}
}
对比总结:其中DomParse和SAXParse是jdk自带的解析方式,Jdom是第三方提供的插件。DomParse会解析所有的xml元素,而SAXParse可以通过重写DefaultHandler实现自己解析功能,因此效率较高。而Jdom的强大之处在于它不仅可以解析xml,还可以向xml中写入数据。
学java,喝咖啡
猜你喜欢
- 2024-10-17 Qt开发-DOM方式解析XML(qt开发工具)
- 2024-10-17 JAVA 操作笔记-XML(六)(xml在java中怎么用)
- 2024-10-17 作为一名程序猿,你不可不知的Java基础知识的三十个经典问答
- 2024-10-17 Android中XML文件解析,现在了解还不晚
- 2024-10-17 JSP 标准标签库(JSTL)(jsp标签库有哪些)
- 2024-10-17 Spring源码阅读:Spring XML解析机制
- 2024-10-17 XML文件(xml文件怎么打开)
- 2024-10-17 Python如何解析HTML和XML数据(python解析html xml最好的模块)
- 2024-10-17 深入解析Python中的XML处理:理论与实践的结合
- 2024-10-17 XML的解析方式(xml的解析方式有哪些)
你 发表评论:
欢迎- 05-15java使用iText解析PDF文件
- 05-15java 将pdf 形成的图片,每页一张图片 保存为pdf文件
- 05-15Java学习123——虚拟方法调用(Virtual Method Invocation)
- 05-15什么是JNI?为什么会有Native层?如何使用?
- 05-15Socket通信
- 05-15译文:理解Java中的弱引用
- 05-15Java 调用 DeepSeek 模型的完整示例及特点
- 05-15Java 对象和类
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)