xml 转 java_XML转换为JAVA
将XML文档中的内容转换为JAVA对象共有4中方式它,它们分别是DOM,SAX,DOM4J , JDOM。接下来我用代码演示JAVA官方提供我们的两种方式DOM和SAX。
DOM是JDK自带的接下来我来演示一下怎样获取XML文本中的内容。以下是xml文件中的内容。
张三
12
李四
16
我们通过DOM的方式来获取来获取xml文件中的内容。
public class DOMDemo01 {
private static DocumentBuilderFactory documentBuilderFactory ;
private static DocumentBuilder documentBuilder;
private static Document document;
public static void main(String[] args) {
documentBuilderFactory = DocumentBuilderFactory.newInstance();
try {
documentBuilder = documentBuilderFactory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
try {
document = documentBuilder.parse("src/main/resources/xml/student.xml");
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
NodeList parents = document.getElementsByTagName("student");
System.out.println("一共有"+parents.getLength()+"个节点");
for(int i=0;i
Element students = (Element) parents.item(i);
//获取父标签中的值
String id = students.getAttribute("id");
String stuid = students.getAttribute("stuid");
System.out.println("id : "+id+" stuid : "+stuid);
//获取子标签
NodeList childs = students.getChildNodes();
//DOM将空白和文件也看作为节点 // System.out.println(childs.getLength());
//打印student节点的所有标签
for(int j=0;j
//获取除文本节点和空格节点
if(childs.item(j).getNodeType() == Node.ELEMENT_NODE){
Student student = new Student();
System.out.print(childs.item(j).getNodeName() + " : ");
//通过childs.item(j).getTextContent()也可以获取节点内容
System.out.println(childs.item(j).getFirstChild().getNodeValue());
}
}
}
}
}
以下是输出的内容
image.png
SAX解析XML文件
import org.xml.sax.SAXException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.IOException;
public class SAXDemo {
public static void main(String[] args) {
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
SAXParser parser = factory.newSAXParser();
SAXHandle saxHandle = new SAXHandle();
parser.parse("src/main/resources/xml/student.xml",saxHandle);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}
}
}
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SAXHandle extends DefaultHandler {
/*
* 用来表示解析的开始
*/
@Override
public void startDocument () throws SAXException {
super.startDocument();
System.out.println("解析标签开始");
}
@Override
public void endDocument () throws SAXException {
super.startDocument();
System.out.println("解析标签结束");
}
@Override
public void startElement (String uri, String localName, String qName,
Attributes attributes) throws SAXException {
super.startElement(uri,localName,qName,attributes);
if(qName.equals("student") ){
int length = attributes.getLength();
for(int i=0;i
System.out.print(attributes.getQName(i)+" : ");
System.out.print(attributes.getValue(i)+" ");
}
System.out.println();
}else if(!qName.equals("student")){
System.out.print("节点名 : "+qName +" ");
}
}
/*
* 用来表示解析的结束
*/
@Override
public void endElement (String uri, String localName, String qName)
throws SAXException {
super.endElement(uri,localName,qName);
}
@Override
public void characters (char ch[], int start, int length)
throws SAXException {
String value = new String(ch,start,length);
//去掉换行和空制符
if(!value.trim().equals("")){
System.out.println(value);
}
}
}
运行结果
image.png
总结:DOM解析将文件的内容全部加载在内存中并且形成一个DOM树,如果XML非常大,则DOM很浪费时间。SAX是基于事件的解析,会一步一步的判断每一行的XML文件中的内容,执行开始标签触发startDocument()方法,每走到结束标签都会触发一个endDocument方法。执行完最后标签会执行endDocument方法。
DOM
优点:形成DOM树,实现简单。
缺点: 当XML文件非常大时,对内存消耗比较大,容易影响解析,容易造成内存溢出。
SAX
优点:采用事件的驱动模式,不需要关系赋值节点,按行进行解析。
缺点:不易编码。
xml 转 java_XML转换为JAVA相关推荐
- XStream将XML转换为JAVA对象快速指南
XStream是一套简单实用的JAVA类库,它用于序列化对象和XML对象之间互相转换.由于XStream配置简单,灵活易用,因此在XML对象和JAVA对象序列化市场上有很大的空间.本文并不会对XStr ...
- java xslt 数据转换_如何将xslt结果转换为Java对象?
我有一个 XML文件: Empire Burlesque Bob Dylan USA Columbia 10.90 1985 而这个XSL文件: 现在我想将结果转换为Java类. Java的: @Xm ...
- 使用JAXB将XML Schema绑定到Java类
http://blog.csdn.net/zsyspace/article/details/1786079 Java Architecture for XML Binding (JAXB) 是一项可以 ...
- 现代化历险记:策略+将COBOL转换为Java的示例
在Keyhole Software,我们在很大程度上是一家现代化公司. 我们拥有一些顾问,他们专门研究将旧的代码迁移到新的,翻新的残旧代码库,并为大多数已经被供应商锁定的企业设计更光明的未来. 作为这 ...
- java 序列化成xml文件_将Java对象序列化成JSON和XML格式
1.先定义一个Java对象Person: public class Person { String name; int age; int number; public String getName() ...
- DOM4J 不兼容的类型: JAVA.UTIL.LIST (ORG.DOM4J.NODE)无法转换为JAVA.UTIL.LIST(ORG.DOM4J.ELEMENT)
为了解决Dom4j解析xml出现非法反射异常的问题,方法见 Illegal reflective access by org.dom4j.io.SAXContentHandler ,使用Dom4j解析 ...
- 将符合ISO 8601的字符串转换为java.util.Date
我正在尝试将ISO 8601格式的String转换为java.util.Date . 如果与区域设置(比较示例)一起使用,我发现模式yyyy-MM-dd'T'HH:mm:ssZ符合ISO8601. 但 ...
- saxon 使用_Java XML和JSON:Java SE的文档处理,第1部分:SAXON和Jackson
saxon 使用 XML和JSON对我来说很重要,我感谢Apress让我写了一整本有关它们的书. 在本文中,我将简要介绍新书的第二版Java XML和JSON . 如果有足够的空间,我还将展示两个有用 ...
- cobol和java_现代化历险:策略+将COBOL转换为Java的示例
cobol和java 在Keyhole Software,我们在很大程度上是一家现代化公司. 我们有一些顾问,专门研究将旧的代码迁移到新的,翻新的残旧代码库,并为大多数已经被供应商锁定的企业设计更光明 ...
最新文章
- 机器不学习:浅析深度学习在实体识别和关系抽取中的应用
- 5种iterator
- 中国天然石墨行业市场供需与战略研究报告
- 百面机器学习—8.概率图模型之HMM模型
- xampp 2016支持php7.0,xampp 装php7
- PHP笔记(CSS篇)
- 南宁公交有两个应用付费通道,互不通用
- python读取excel绘图y轴设置_python读取并定位excel数据坐标系详解
- Matlab颜色对照(RGB三元组、十六进制表示)
- linux crontab测试,crontab使用测试
- Python实现图像的全景拼接
- centOS下mysql主从配置
- SQL进阶篇之约束(Constraints)
- C++, RAII, and the GSL Refresher
- 深度优先搜索--不撞南墙不回头
- 【Derivation】采样定理证明
- 牛客笔试OJ-在线编辑器输入输出总结
- Nginx+FFmpeg rtsp转flv实时预览
- Simple: SQLite3 结巴分词插件
- Already included file name .......