xml数据格式学习笔记
文章目录
0 xml介绍
第0章 xml介绍
1.什么是xml文件
1.1 xml文件的作用:主要是用来存储和传输数据
xml是数据封装和消息传递技术。
1.2 解析xml文件的方法:
SAX(边读边解析,适合大文件)
DOM、
JDom,
DOM4J(DOM封装,用起来更方便灵活,适合小文件)、
第1章 SAX解析xml文件
JDK自带
边读边解析,适合大文件,移动端,提供内存比较小的地方,手机APP
第2章 Dom解析xml文件
JDK自带
DOM:文档对象模型
讲xml文档表示为树,在内存中解析和存储xml文档,允许随机访问文档的不同部分
DOM解析XML:
DOM的优点:由于树在内存中是持久的因此可以修改后更新,它还可以在任何时候在树中
上下导航,API使用起来也必将简单。
第3章 JDom解析xml文件
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom</artifactId>
<version>2.0.2</version>
</dependency>
JDOM简化了与XML的交互并且比使用DOM实现更快,JDOM与DOM主要有两方面的不同:
1.JDOM仅使用具体类而不使用接口,这在某些方面简化了API,但是同时也限制了灵活性;
2.API大量使用了Collections类,简化了那些已经熟悉了这些类的Java开发者的使用,更容易上手。
第4章 DOM4J解析xml文件
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
操作非常简单,Hibernate用它来读写配置文件
常用对象:
saxReader:读取xml文件到Document树结构文件对象
Document:是一个xml文档对象树,类比Html文档对象
Element:元素节点,通过Document对象可以查找单个元素
DOM4J解析步骤:
1.创建解析器
SAXReader reader = new SAXReader();
2.Document对象:通过解析器read方法获取
Document doc = reader
.read(“studentInfo.xml”);
3.获取xml根节点:
Element root = doc.getRootElement();
4.遍历解析子节点
第5章 xpath语法 + dom4j解析
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.6</version>
</dependency>
xpath使用路径表达式来选取XML文档中的节点或者节点集。
节点是通过沿着路径(path)来选取的。
第6章 各种解析方法比较
DOM和JDOM在性能测试时表现不佳,在测试10M文档时内存溢出。
SAX表现较好,这要依赖于它特定的解析方式,一个SAX检测即将到来的XML流,
但并没有载入到内存(当然当XML流被读入时,会有部分文档暂时隐藏到内存中)
DOM4J是这场测试的获胜者,目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的
Hibernate也用DOM4J来读取XML配置文件。
Web开发建议使用Dom4j方式解析xml。
第7章 xstream生成解析xml字符串
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.9</version>
</dependency>
//1.将Java对象生成xml字符串
XStream xstream = new XStream(
new Xpp3Driver());
String xmlStr = xstream.toXML§;
//2.将xml字符串解析成Java对象
Person person = (Person)xstream.fromXML(xmlStr);
1 SAX方式解析xml文件
1.1 person.xml
<?xml version="1.0" encoding="UTF-8"?>
<people>
<person personid="E01">
<name>Tony Blair</name>
<address>10 Downing Street,London,UK</address>
<tel>(061) 98765</tel>
<fax>(061) 98765</fax>
<email>blair@evrywhere.com</email>
</person>
<person personid="E02">
<name>Bill Clinton</name>
<address>White House,USA</address>
<tel>(001) 6400 98765</tel>
<fax>(001) 6400 98765</fax>
<email>bill@everywhere.com</email>
</person>
</people>
1.2 SAXReadXML.java
package com.tangguanlin.xml;
import org.xml.sax.SAXException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* 说明:SAX方式解析xml
* 作者:汤观林
* 日期:2021年05月22日 15时
* SAX解析的特点:
* 1.基于事件驱动
* 2.顺序读取,速度快
* 3.不能任意读取节点(灵活性差)
* 4.解析时占用的内存小
* 5.SAX更适用于在性能要求更高的设备上使用(Android开发中)
*/
public class SAXReadXML {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
//1.创建一个SAX解析器工厂对象
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
//2.通过工厂对象创建SAX解析器
SAXParser saxParser = saxParserFactory.newSAXParser();
//3.创建一个数据处理器(需要我们自己来编写)
PersonHandler personHandler = new PersonHandler();
//4.开始解析
FileInputStream fis = new FileInputStream("D:\\05project\\base64\\src\\main\\java\\com\\tangguanlin
\\xml\\person.xml");
saxParser.parse(fis,personHandler);
List<Person> persons = personHandler.getPersons();
for(Person p:persons){
System.out.println(p);
}
}
}
1.3 PersonHandler.java
创建数据处理器实现类
package com.tangguanlin.xml;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import java.util.ArrayList;
import java.util.List;
/**
* 说明:创建数据处理器实现类
* 作者:汤观林
* 日期:2021年05月22日 15时
*/
public class PersonHandler extends DefaultHandler {
private List<Person> persons = null;
Person p =null; //当前正在解析的person
private String tag;//用于记录当前正在解析的标签名
public List<Person> getPersons(){
return persons;
}
//开始解析文档时调用
@Override
public void startDocument() throws SAXException {
super.startDocument();
persons = new ArrayList<>();
System.out.println("开始解析文档");
}
/**
* 遇到开始标签时调用 <name>
* @param uri 命名空间 类似于包名 这里没有用
* @param localName 不带前缀的标签 <person>
* @param qName 带前缀的标签 <aa:person> 统一用qName即可
* @param attributes 当前标签的属性集合 personid="E01"
* @throws SAXException
*/
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
if("person".equals(qName)){ //表示现在解析到<person>标签了
p = new Person();
String personid = attributes.getValue("personid");
p.setPersonid(personid);
}
tag = qName;
}
//解析文本内容时 调用 zhangsan
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
if(tag!= null){
if("name".equals(tag)){
p.setName(new String(ch,start,length));
}else if("address".equals(tag)){
p.setAddress(new String(ch,start,length));
}else if("tel".equals(tag)){
p.setTel(new String(ch,start,length));
}else if("fax".equals(tag)){
p.setFax(new String(ch,start,length));
}else if("email".equals(tag)){
p.setEmail(new String(ch,start,length));
}
}
}
//遇到结束标签时调用 </name>
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
if("person".equals(qName)){
persons.add(p);
System.out.println(p);
}
tag = null;
}
//结束解析文档时调用
@Override
public void endDocument() throws SAXException {
super.endDocument();
System.out.println("解析文档结束");
}
}
运行结果:
开始解析文档
Person{personid='E01', name='Tony Blair', address='10 Downing Street,London,UK', tel='(061) 98765',
fax='(061) 98765', email='blair@evrywhere.com'}
Person{personid='E02', name='Bill Clinton', address='White House,USA',tel='(001) 6400 98765',
fax='(001) 6400 98765', email='bill@everywhere.com'}
解析文档结束
Person{personid='E01', name='Tony Blair', address='10 Downing Street,London,UK',tel='(061) 98765',
fax='(061) 98765', email='blair@evrywhere.com'}
Person{personid='E02', name='Bill Clinton', address='White House,USA',tel='(001) 6400 98765',
fax='(001) 6400 98765', email='bill@everywhere.com'}
2 Dom方式解析xml文件
2.1 person.xml
<?xml version="1.0" encoding="UTF-8"?>
<people>
<person personid="E01">
<name>Tony Blair</name>
<address>10 Downing Street,London,UK</address>
<tel>(061) 98765</tel>
<fax>(061) 98765</fax>
<email>blair@evrywhere.com</email>
</person>
<person personid="E02">
<name>Bill Clinton</name>
<address>White House,USA</address>
<tel>(001) 6400 98765</tel>
<fax>(001) 6400 98765</fax>
<email>bill@everywhere.com</email>
</person>
</people>
2.2 DomReadXML.java
package com.tangguanlin.xml;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* 说明:DOM方式解析xml
* 作者:汤观林
* 日期:2021年05月22日 16时
* DOM解析XML:
* 1.基于树型结构,通过解析器一次性把文档加载到内存中,所以会比较占用内存,可以随机访问
* 2.更加灵活,更适合在WEB开发中使用
*/
public class DomReadXML {
public static void main(String[] args) throws ParserConfigurationException, IOException, SAXException {
//1.创建一个DOM解析器工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//2.通过工厂对象创建解析器对象
DocumentBuilder documentBuilder = factory.newDocumentBuilder();
//3.解析文档,生成document树
FileInputStream fis = new FileInputStream("D:\\05project\\base64\\src\\main\\java\\com\\tangguanlin
\\xml\\person.xml");
//此代码完成后,整个XML文档已经被加载到内存中,以树状形式存储
Document doc = documentBuilder.parse(fis);
//4.从内存中document树中读取数据
//获取节点名称为person的所有节点,返回节点集合
NodeList personNodeList = doc.getElementsByTagName("person");
Person p = null;
List<Person> persons = new ArrayList<Person>();
//此循环会迭代2次
for(int i=0;i<personNodeList.getLength();i++){
Node personNode = personNodeList.item(i);
p = new Person();
//获取第1个节点的属性值personid的值
String personid = personNode.getAttributes().getNamedItem("personid").getNodeValue();
p.setPersonid(personid);
//获取当前节点的子节点
NodeList childNotes = personNode.getChildNodes();
for(int j=0;j<childNotes.getLength();j++){
Node item = childNotes.item(j);
//获取节点名称
String nodeName = item.getNodeName();
if("name".equals(nodeName)){
p.setName(item.getFirstChild().getNodeValue()); //节点的值 姓名
}
if("address".equals(nodeName)){
p.setAddress(item.getFirstChild().getNodeValue()); //节点的值 地址
}
if("tel".equals(nodeName)){
p.setTel(item.getFirstChild().getNodeValue()); //节点的值 电话
}
if("fax".equals(nodeName)){
p.setFax(item.getFirstChild().getNodeValue()); //节点的值 传真
}
if("email".equals(nodeName)){
p.setEmail(item.getFirstChild().getNodeValue()); //节点的值 email
}
}
persons.add(p);
}
System.out.println("结果是:"+Arrays.toString(persons.toArray()));;
}
}
运行结果:
结果是:[
Person{personid='E01', name='Tony Blair', address='10 Downing Street,London,UK', tel='(061) 98765',
fax='(061) 98765', email='blair@evrywhere.com'},
Person{personid='E02', name='Bill Clinton', address='White House,USA',tel='(001) 6400 98765',
fax='(001) 6400 98765', email='bill@everywhere.com'}
]
3 JDom方式解析xml文件
3.1 JDom依赖
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom</artifactId>
<version>2.0.2</version>
</dependency>
3.2 person.xml
<?xml version="1.0" encoding="UTF-8"?>
<people>
<person personid="E01">
<name>Tony Blair</name>
<address>10 Downing Street,London,UK</address>
<tel>(061) 98765</tel>
<fax>(061) 98765</fax>
<email>blair@evrywhere.com</email>
</person>
<person personid="E02">
<name>Bill Clinton</name>
<address>White House,USA</address>
<tel>(001) 6400 98765</tel>
<fax>(001) 6400 98765</fax>
<email>bill@everywhere.com</email>
</person>
</people>
Person.java
package com.tangguanlin.xml;
/**
* 说明:person
* 作者:汤观林
* 日期:2021年05月22日 15时
*/
public class Person {
private String personid;
private String name;
private String address;
private String tel;
private String fax;
private String email;
public Person() {
}
public String getPersonid() {
return personid;
}
public void setPersonid(String personid) {
this.personid = personid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getFax() {
return fax;
}
public void setFax(String fax) {
this.fax = fax;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "Person{" +
"personid='" + personid + '\'' +
", name='" + name + '\'' +
", address='" + address + '\'' +
", tel='" + tel + '\'' +
", fax='" + fax + '\'' +
", email='" + email + '\'' +
'}';
}
}
3.2 JDomReadXML
package com.tangguanlin.xml;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* 说明:JDOM方式解析XML
* 作者:汤观林
* 日期:2021年05月22日 17时
* JDOM解析XML:
* 1.与DOM类似,基于树型结构
* 2.与DOM的区别:
* (1)第三方的组件
* (2)实现使用JAVA的Collection接口
* (3)效率比DOM高
*/
public class JDomReadXML {
public static void main(String[] args) throws IOException, JDOMException {
List<Person> persons = new ArrayList<Person>();
Person p = null;
//1.创建JDom解析器对象
SAXBuilder saxBuilder = new SAXBuilder();
//2.解析文档,生成document树
FileInputStream fis = new FileInputStream("D:\\05project\\base64\\src\\main\\java\\com\\tangguanlin
\\xml\\person.xml");
//此代码完成后,整个XML文档已经被加载到内存中,以树状形式存储
Document doc = saxBuilder.build(fis);
//3.从内存中document树中读取数据
//获取到根节点
Element rootElement = doc.getRootElement();
//获取根节点下面的所有子节点
List<Element> personElementList = rootElement.getChildren();
for(Element personElement:personElementList){
p = new Person();
String personid = personElement.getAttributeValue("personid");
p.setPersonid(personid);
//获取到person标签下面的属性list
List<Element> attrElementList = personElement.getChildren();
for(Element attrElement:attrElementList){
String tag = attrElement.getName();
if("name".equals(tag)){
p.setName(attrElement.getValue());
}else if("address".equals(tag)){
p.setAddress(attrElement.getValue());
}else if("tel".equals(tag)){
p.setTel(attrElement.getValue());
}else if("fax".equals(tag)){
p.setFax(attrElement.getValue());
}else if("email".equals(tag)){
p.setEmail(attrElement.getValue());
}
}
persons.add(p);
}
System.out.println(Arrays.toString(persons.toArray()));
}
}
运行结果:
[
Person{personid='E01', name='Tony Blair', address='10 Downing Street,London,UK',tel='(061) 98765',
fax='(061) 98765', email='blair@evrywhere.com'},
Person{personid='E02', name='Bill Clinton', address='White House,USA',tel='(001) 6400 98765',
fax='(001) 6400 98765', email='bill@everywhere.com'}
]
4 Dom4j方式解析xml文件
4.1 Dom4J依赖
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
4.2 person.xml
<?xml version="1.0" encoding="UTF-8"?>
<people>
<person personid="E01">
<name>Tony Blair</name>
<address>10 Downing Street,London,UK</address>
<tel>(061) 98765</tel>
<fax>(061) 98765</fax>
<email>blair@evrywhere.com</email>
</person>
<person personid="E02">
<name>Bill Clinton</name>
<address>White House,USA</address>
<tel>(001) 6400 98765</tel>
<fax>(001) 6400 98765</fax>
<email>bill@everywhere.com</email>
</person>
</people>
Person.java
package com.tangguanlin.xml;
/**
* 说明:person
* 作者:汤观林
* 日期:2021年05月22日 15时
*/
public class Person {
private String personid;
private String name;
private String address;
private String tel;
private String fax;
private String email;
public Person() {
}
public String getPersonid() {
return personid;
}
public void setPersonid(String personid) {
this.personid = personid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getFax() {
return fax;
}
public void setFax(String fax) {
this.fax = fax;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "Person{" +
"personid='" + personid + '\'' +
", name='" + name + '\'' +
", address='" + address + '\'' +
", tel='" + tel + '\'' +
", fax='" + fax + '\'' +
", email='" + email + '\'' +
'}';
}
}
4.3 Dom4JReadXML
package com.tangguanlin.xml;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
/**
* 说明:DOM4J方式解析XML
* 作者:汤观林
* 日期:2021年05月22日 18时
* DOM4J解析XML:
* 1.基于树型结构,第三方组件
* 2.解析速度快,效率更高,使用的JAVA中的迭代器实现数据读取,在WEB框架中使用最多(Hibernate)
*/
public class Dom4JReadXML {
public static void main(String[] args) throws FileNotFoundException, DocumentException {
List<Person> persons = new ArrayList<>();
Person p = null;
//1.创建Dom4j的解析器对象
SAXReader saxReader = new SAXReader();
//2.解析文档,生成document树
FileInputStream fis = new FileInputStream("D:\\05project\\base64\\src\\main\\java\\com\\tangguanlin
\\xml\\person.xml");
//此代码完成后,整个XML文档已经被加载到内存中,以树状形式存储
Document document = saxReader.read(fis);
//3.从内存中document树中读取数据
Element rootElement = document.getRootElement();
Iterator<Element> personIterator = rootElement.elementIterator();
while(personIterator.hasNext()){
p = new Person();
Element personElement = personIterator.next();
p.setPersonid(personElement.attributeValue("personid"));
Iterator<Element> attrIterator = personElement.elementIterator();
while(attrIterator.hasNext()){
Element attrElement = attrIterator.next();
String tag = attrElement.getName();
if("name".equals(tag)){
p.setName(attrElement.getText());
}else if("address".equals(tag)){
p.setAddress(attrElement.getText());
}else if("tel".equals(tag)){
p.setTel(attrElement.getText());
}else if("fax".equals(tag)){
p.setFax(attrElement.getText());
}else if("email".equals(tag)){
p.setEmail(attrElement.getText());
}
}
persons.add(p);
}
System.out.println(Arrays.toString(persons.toArray()));
}
}
运行结果:
[
Person{personid='E01', name='Tony Blair', address='10 Downing Street,London,UK',tel='(061) 98765',
fax='(061) 98765', email='blair@evrywhere.com'},
Person{personid='E02', name='Bill Clinton', address='White House,USA',tel='(001) 6400 98765',
fax='(001) 6400 98765', email='bill@everywhere.com'}
]
5 Dom4j+xpath方式解析xml文件
5.1 Dom4j依赖
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.6</version>
</dependency>
5.2 sys-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<database-info>
<driver-name port="7001">com.mysql.jdbc.Driver</driver-name>
<url>jdbc:mysql://192.168.1.151:8080/bjpowernode</url>
<user>root</user>
<password>123</password>
</database-info>
</config>
5.3 Dom4j_Xpath_ReadXML
package com.tangguanlin.xml;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
/**
* 说明:Dom4j+xpath解析xml
* 作者:汤观林
* 日期:2021年05月22日 22时
*/
public class Dom4j_Xpath_ReadXML {
public static void main(String[] args) throws FileNotFoundException, DocumentException {
//1.创建Dom4j的解析器对象
SAXReader saxReader = new SAXReader();
//2.解析文档,生成document树
FileInputStream fis = new FileInputStream("D:\\05project\\base64\\src\\main\\java\\com\\tangguanlin
\\xml\\sys-config.xml");
//此代码完成后,整个XML文档已经被加载到内存中,以树状形式存储
Document document = saxReader.read(fis);
//3.从内存中document树中读取数据
//driver-name节点元素的xpath路径: /config/database-info/driver-name
Element driverNameElement =(Element)document.selectSingleNode("/config/database-info/driver-name");
//获取属性对象
Attribute portAttr = driverNameElement.attribute("port");
//获取属性对象的属性内容
String port = portAttr.getStringValue();
System.out.println(port);
//取得driverNameElement节点的属性值port:7001
String port2 = driverNameElement.attributeValue("port");
System.out.println(port2);
//取得driverNameElement节点的文本内容
String driverName = driverNameElement.getStringValue();
System.out.println(driverName);
//url节点元素的xpath路径: /config/database-info/url
//url节点元素的xpath路径: /config//url
//url节点元素的xpath路径: //url
Element urlElement = (Element) document.selectSingleNode("//url");
String url = urlElement.getText();
System.out.println(url);
}
}
运行结果:
7001
7001
com.mysql.jdbc.Driver
jdbc:mysql://192.168.1.151:8080/bjpowernode
6 各种解析方法比较
DOM和JDOM在性能测试时表现不佳,在测试10M文档时内存溢出。
SAX表现较好,这要依赖于它特定的解析方式,一个SAX检测即将到来的XML流,
但并没有载入到内存(当然当XML流被读入时,会有部分文档暂时隐藏到内存中)
DOM4J是这场测试的获胜者,目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的
Hibernate也用DOM4J来读取XML配置文件。
Web开发建议使用Dom4j方式解析xml。
7 xstream生成解析xml字符串
7.1 xstream依赖
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.9</version>
</dependency>
7.2 person.xml
<?xml version="1.0" encoding="UTF-8"?>
<people>
<person personid="E01">
<name>Tony Blair</name>
<address>10 Downing Street,London,UK</address>
<tel>(061) 98765</tel>
<fax>(061) 98765</fax>
<email>blair@evrywhere.com</email>
</person>
<person personid="E02">
<name>Bill Clinton</name>
<address>White House,USA</address>
<tel>(001) 6400 98765</tel>
<fax>(001) 6400 98765</fax>
<email>bill@everywhere.com</email>
</person>
</people>
Person.java
package com.tangguanlin.xml;
/**
* 说明:person
* 作者:汤观林
* 日期:2021年05月22日 15时
*/
public class Person {
private String personid;
private String name;
private String address;
private String tel;
private String fax;
private String email;
public Person() {
}
public String getPersonid() {
return personid;
}
public void setPersonid(String personid) {
this.personid = personid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getFax() {
return fax;
}
public void setFax(String fax) {
this.fax = fax;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "Person{" +
"personid='" + personid + '\'' +
", name='" + name + '\'' +
", address='" + address + '\'' +
", tel='" + tel + '\'' +
", fax='" + fax + '\'' +
", email='" + email + '\'' +
'}';
}
}
7.3 XtreamToXMLStr
package com.tangguanlin.xml;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.Xpp3Driver;
/**
* 说明:通过Xtream生成解析xml字符串---数据传输时使用
* 作者:汤观林
* 日期:2021年05月22日 19时
*/
public class XtreamToXMLStr {
public static void main(String[] args) {
//1.将Java对象生成xml字符串
Person p = new Person();
p.setPersonid("1212");
p.setAddress("北京");
p.setEmail("tangguanlin200@163.com");
p.setFax("6768789798");
p.setTel("13838389438");
p.setName("38");
XStream xstream = new XStream(new Xpp3Driver());
//取别名 根标签取别名
xstream.alias("person", Person.class);
//设置 对象字段 作为 标签属性
xstream.useAttributeFor(Person.class, "personid");
String xmlStr = xstream.toXML(p);
System.out.println(xmlStr);
//2.将xml字符串解析成Java对象
Person person = (Person) xstream.fromXML(xmlStr);
System.out.println(person);
}
}
运行结果:
<person personid="1212">
<name>38</name>
<address>北京</address>
<tel>13838389438</tel>
<fax>6768789798</fax>
<email>tangguanlin200@163.com</email>
</person>
Person{personid='1212', name='38', address='北京', tel='13838389438',fax='6768789798', email='tangguanlin200@163.com'}