java,解析想xml,生成xml,步骤,原理

合集下载

java解析xml的原理

java解析xml的原理

java解析xml的原理XML (eXtensible Markup Language) 是一种用于描述数据的标记语言,被广泛应用于数据交换和文档存储。

在Java开发中,解析XML是一项常见的任务,Java提供了多种方式来解析XML,包括DOM (Document Object Model),SAX (Simple API for XML),和StAX (Streaming API for XML)。

1. DOM解析XMLDOM解析器将整个XML文档加载到内存中,并将其表示为一个树状结构,可以通过操作树节点来访问和修改XML数据。

DOM解析XML的原理如下:a) 读取整个XML文件到内存中,构建一个DOM树。

b) 遍历DOM树,根据节点的类型 (元素、属性、文本等) 来访问和操作XML数据。

DOM解析XML的优点是可以随机访问XML节点,灵活性高,可以方便地对XML数据进行增、删、改操作。

然而,由于将整个XML文档加载到内存中,占用较大内存空间,适合处理小型XML文件。

2. SAX解析XMLSAX解析器按顺序逐行读取XML文档,当遇到节点开始、节点结束、文本等事件时,调用相应的回调方法处理节点数据。

SAX解析XML的原理如下:a) 逐行读取XML文档。

b) 遇到节点开始、节点结束、文本等事件时,调用相应的回调方法处理节点数据。

SAX解析XML的优点是占用较少内存空间,适合处理大型XML 文件。

然而,由于无法直接访问XML节点,只能顺序读取,因此对于树状结构的XML数据,处理起来较为繁琐。

3. StAX解析XMLStAX解析器是一种推拉模型的解析器,提供了流式的方式来解析XML文档。

StAX解析XML的原理如下:a) 逐行读取XML文档。

b) 根据节点的类型 (元素、属性、文本等) 来访问和操作XML数据。

StAX解析XML的优点是既可以随机访问XML节点,又可以按需读取XML数据,适合处理中型XML文件。

java中四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)

java中四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)

java中四种⽣成和解析XML⽂档的⽅法详解(介绍+优缺点⽐较+⽰例)众所周知,现在解析XML的⽅法越来越多,但主流的⽅法也就四种,即:DOM、SAX、JDOM和DOM4J下⾯⾸先给出这四种⽅法的jar包下载地址DOM:在现在的Java JDK⾥都⾃带了,在xml-apis.jar包⾥⼀、介绍及优缺点分析1. DOM(Document Object Model)DOM是⽤与平台和语⾔⽆关的⽅式表⽰XML⽂档的官⽅W3C标准。

DOM是以层次结构组织的节点或信息⽚断的集合。

这个层次结构允许开发⼈员在树中寻找特定信息。

分析该结构通常需要加载整个⽂档和构造层次结构,然后才能做任何⼯作。

由于它是基于信息层次的,因⽽DOM被认为是基于树或基于对象的。

【优点】①允许应⽤程序对数据和结构做出更改。

②访问是双向的,可以在任何时候在树中上下导航,获取和操作任意部分的数据。

【缺点】①通常需要加载整个XML⽂档来构造层次结构,消耗资源⼤。

2. SAX(Simple API for XML)SAX处理的优点⾮常类似于流媒体的优点。

分析能够⽴即开始,⽽不是等待所有的数据被处理。

⽽且,由于应⽤程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。

这对于⼤型⽂档来说是个巨⼤的优点。

事实上,应⽤程序甚⾄不必解析整个⽂档;它可以在某个条件得到满⾜时停⽌解析。

⼀般来说,SAX还⽐它的替代者DOM快许多。

选择DOM还是选择SAX?对于需要⾃⼰编写代码来处理XML⽂档的开发⼈员来说,选择DOM还是SAX解析模型是⼀个⾮常重要的设计决策。

DOM采⽤建⽴树形结构的⽅式访问XML⽂档,⽽SAX采⽤的是事件模型。

DOM解析器把XML⽂档转化为⼀个包含其内容的树,并可以对树进⾏遍历。

⽤DOM解析模型的优点是编程容易,开发⼈员只需要调⽤建树的指令,然后利⽤navigation APIs访问所需的树节点来完成任务。

可以很容易的添加和修改树中的元素。

Java动态生成和解析xml文件步骤详解

Java动态生成和解析xml文件步骤详解

Java动态⽣成和解析xml⽂件步骤详解⾸先声明,这个地⽅是利⽤dom4j进⾏解析和⽣成,需要⽤到dom4j的jar包,所以⾸先需要我们获取jar包:<dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency>⽣成xml⽂件代码案列:package day12;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.XMLWriter;/*** 写出XML⽂档*/public class WriteXmlDemo {public static void main(String[] args) {List<Emp> empList = new ArrayList<Emp>();empList.add(new Emp(1,"张三",22,"男",3000));empList.add(new Emp(2,"李四",23,"⼥",4000));empList.add(new Emp(3,"王五",24,"男",5000));empList.add(new Emp(4,"赵六",25,"⼥",6000));empList.add(new Emp(5,"钱七",26,"男",7000));empList.add(new Emp(6,"传奇",21,"男",8000));/** 写出XML⽂档的⼤致步骤* 1.创建空⽩⽂档对象Document* 2.向该⽂档中添加根元素* 3.按照规定的XML⽂档结构从根元素开始,逐级添加⼦元素,已完成该结构* 4.创建XMLWriter* 5.将Document对象写出成XML⽂档* 6.将XMLWriter关闭*///1Document doc = DocumentHelper.createDocument();/** 2.Element addElement(String name)* Document提供的该⽅法是⽤来向当前⽂档中添加给定名字的根元素。

java注解生成xml和包含CDATA问题

java注解生成xml和包含CDATA问题

java注解⽣成xml和包含CDATA问题百度java⽣成xml,有⼀⼤推的⽂章,主要的⽣成⽅式⼀种使⽤Dom4J ,还有⼀种使⽤Jdk⾃带注解类!下⾯主要整理我注解类的使⽤,(可以参考这篇⽂章)和xml中CDATA 问题的解决⽅法!1:要⽣成的xml原始⽂件!<?xml version="1.0" encoding="utf-8"?><item><id>35399645973</id><title><![CDATA[补⽔⾸选⽔密码⽔保湿美⽩护洗护组合三件]]> </title><category><![CDATA[美妆>保湿>洗护]]></category><url><![CDATA[/detail-35399645973]]> </url><url_wap><![CDATA[/de99645973]]> </url_wap><price>310</price><promotion_price>93.8</promotion_price><wap_price>85</wap_price><sub_item_ids><sub_item_id>35399645973_1</sub_item_id><sub_item_id>35399645973_2</sub_item_id><sub_item_id>35399645973_3</sub_item_id>……</sub_item_ids><detail><![CDATA[商品详情,⽀持html图⽂混排]]> </detail><status>1<status><pic_main><img><url><![CDATA[/10777829/T_400x400.jpg]]> </url><size>400x400</size></img></pic_main><pic_extra><img><url><![CDATA[/10777821_400x400.jpg]]> </url><size>400x400</size></img><img><url><![CDATA[/10777822_400x400.jpg]]> </url><size>400x400</size></img></pic_extra ></item>2:xml对应的model类!(1):FanLiProductInofMsg.javaimport java.util.List;import javax.xml.bind.annotation.XmlAttribute;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlElementWrapper;import javax.xml.bind.annotation.XmlRootElement;/**** @author aflyun* @date 2016.06.12**/@XmlRootElement(name="item")public class FanLiProductInofMsg {@XmlAttributeprivate String version;@XmlElementprivate String id;@XmlElementprivate String title;@XmlElementprivate String category;@XmlElementprivate String url;//Pc商品的url@XmlElement(name="url_wap")private String urlWap;//Wap商品的url url_wap@XmlElementprivate String price;@XmlElement(name="promotion_price")private String promotionPrice;//promotion_price@XmlElement(name="wap_price")private String wapPrice;//wap_price@XmlElementWrapper(name="sub_item_ids")@XmlElement(name="sub_item_id")private List<String> subItemIds;//sub_item_ids@XmlElementprivate String detail;//detail@XmlElementprivate String status;//status@XmlElementWrapper(name="pic_main")@XmlElement(name="img")private List<Img> mainImg;//pic_main@XmlElementWrapper(name="pic_extra")@XmlElement(name="img")private List<Img> extraImg;//pic_extrapublic void setVersion(String version) {this.version = version;}public void setId(String id) {this.id = id;}public void setTitle(String title) {this.title = title;}public void setCategory(String category) {this.category = category;}public void setUrl(String url) {this.url = url;}public void setUrlWap(String urlWap) {this.urlWap = urlWap;}public void setPrice(String price) {this.price = price;}public void setPromotionPrice(String promotionPrice) { this.promotionPrice = promotionPrice;}public void setWapPrice(String wapPrice) {this.wapPrice = wapPrice;}public void setSubItemIds(List<String> subItemIds) { this.subItemIds = subItemIds;}public void setDetail(String detail) {this.detail = detail;}public void setStatus(String status) {this.status = status;}public void setMainImg(List<Img> mainImg) {this.mainImg = mainImg;}public void setExtraImg(List<Img> extraImg) {this.extraImg = extraImg;}}(2):Img .javaimport javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlRootElement;/**** @author aflyun* @date 2016.06.12**/@XmlRootElementpublic class Img {@XmlElement(name="url")private String url;@XmlElement(name="size")private String size;public void setUrl(String url) {this.url = url;}public void setSize(String size) {this.size = size;}}3:⽣成过程,已经CDATA问题处理!package com.dufy.test.xml;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileWriter;import java.io.PrintWriter;import java.util.ArrayList;import java.util.List;import javax.xml.bind.JAXBContext;import javax.xml.bind.Marshaller;import javax.xml.transform.sax.SAXResult;import org.apache.xml.serialize.OutputFormat;import org.apache.xml.serialize.XMLSerializer;import org.junit.Test;import com.kuyu.b2b2c.product.fanli.vo.FanLiProductInofMsg; import com.kuyu.b2b2c.product.fanli.vo.Img;public class JuintXmlTest {private static Marshaller marshal;@Testpublic void testXml() throws Exception {List<String> list = new ArrayList<String>();list.add("11_11_11");list.add("22_22_22");list.add("33_33_33");List<Img> imgList = new ArrayList<Img>();Img img = null;for (int i = 0; i < 2; i++) {img = new Img();img.setUrl("-" + i + "-");img.setSize("40×40");imgList.add(img);}FanLiProductInofMsg fps = new FanLiProductInofMsg();fps.setVersion("1.0");fps.setId("110");fps.setTitle("4K ⾼清");fps.setCategory("电视>4K>⾼清");fps.setUrl("");fps.setUrlWap("");fps.setPrice("100");fps.setPromotionPrice("111");fps.setWapPrice("113");fps.setSubItemIds(list);fps.setDetail("wwwwwwwwwwwwwwwwwwwwwww");fps.setStatus("1");fps.setMainImg(imgList);fps.setExtraImg(imgList);PrintWriter pw = new PrintWriter(new File("D:/test.xml"));String ojbectToXmlWithCDATA = ojbectToXmlWithCDATA(FanLiProductInofMsg.class, fps);System.out.println(ojbectToXmlWithCDATA);pw.println(ojbectToXmlWithCDATA);pw.close();}public static String ojbectToXmlWithCDATA(Class clazz, Object obj) throws Exception {JAXBContext context = JAXBContext.newInstance(clazz);// configure an OutputFormat to handle CDATAOutputFormat of = new OutputFormat();of.setCDataElements(new String[] { "^title", //"^category","^url","^url_wap","^detail"}); //// set any other options you'd likeof.setPreserveSpace(true);of.setIndenting(true);// create the serializerByteArrayOutputStream op = new ByteArrayOutputStream();XMLSerializer serializer = new XMLSerializer(op, of);SAXResult result = new SAXResult(serializer.asContentHandler());Marshaller mar = context.createMarshaller();mar.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);mar.marshal(obj, result);return op.toString("utf-8");}}setCDataElements 这⾥⾯你标注需CDATA 的字段!上⾯的这个例⼦可以直接拷贝运⾏,⽹上还⼀些其他的⽅法⽣成xml和CDATA,如果你有好的⽅法,欢迎分享给我,谢谢!4:参考⽂章(1):(2):(3):欢迎访问我的csdn博客,我们⼀同成长!。

java解析想xml生成xml步骤原理

java解析想xml生成xml步骤原理

使用要导入dom4j-1.6.1.jar文件我的dom4j文件在讲解生成xml 1:先通过DocumentHelper类的.createDocument()方法生成Document文件2:接着通过DocumentHelper类的createElement("根节点字符串形式")创建根节点3:通过通过生成的Document的实例的setRootElement(根节点)设置根节点4:接着可以通过Document的实例的getRootElement()方法得到根节点5:接着通过根节点(Element类的实例)的.addElement("子节点的字符串形式")添加子节点6:通过节点类(Element类的实例)的setText("字符串“)设置节点对应的值7:通过Document类的实例的.asXML();的方式的得到xml字符串;(注意:xml 是字符串String的形式。

可以设置几个同名的根节点(<user>username1<user><<user>username2<user>)解析时通过Elment的.elementIterator("user");方法得到迭代器)解析xml 1:通过new SAXReader();得到SAXReader的一个实例2:通过StringReader(参数是字符串)将xml字符串转化为一个Reader字符输入流3:通过SAXReader的实例.read(参数是个Reader)得到得到Document4:通过Document的getRootElement()方法得到根节点(Element类的实例)5:通过根节点的element("子节点的字符串形式")方法得到子节点(若有多个同名子节点通过根节点的.elementIterator("user")得到同名节点迭代器)6:通过节点的getTxt();方法得到节点的值生成xml 例子:private static Document constructDocument()//此处会被下面调用{Document document = DocumentHelper.createDocument();Element root = DocumentHelper.createElement("message");document.setRootElement(root);return document;}document文件。

Java与XML的数据交互与解析方法

Java与XML的数据交互与解析方法

Java与XML的数据交互与解析方法XML(可扩展标记语言)是一种用于存储和传输数据的标记语言,它具有良好的可读性和可扩展性。

在Java开发中,XML常被用于数据交互和解析。

本文将介绍Java与XML的数据交互与解析方法,包括XML的基本概念、Java中的XML解析技术以及XML数据的生成和解析方法。

一、XML的基本概念XML是一种用于描述数据的标记语言,它使用标签来标识数据的结构和内容。

XML的基本组成部分包括标签、元素、属性和文本内容。

1. 标签:XML中使用尖括号(<>)来定义标签,标签用于标识数据的开始和结束位置。

例如:<book>...</book>。

2. 元素:元素是由开始标签和结束标签组成的标记对,用于表示数据的结构和层次关系。

例如:<title>Java与XML</title>。

3. 属性:属性用于描述元素的特性,属性由属性名和属性值组成,属性值必须用引号括起来。

例如:<book id="1">...</book>。

4. 文本内容:文本内容是元素中的实际数据,它位于开始标签和结束标签之间。

例如:<title>Java与XML</title>中的"Java与XML"就是文本内容。

二、Java中的XML解析技术在Java开发中,常用的XML解析技术包括DOM(文档对象模型)、SAX(简单API for XML)和JAXB(Java体系结构的XML绑定)。

1. DOM解析:DOM解析是将整个XML文档加载到内存中,以树形结构表示XML文档,通过操作树节点来访问和修改XML数据。

DOM解析适用于小型XML文档,但对大型XML文档的处理效率较低。

2. SAX解析:SAX解析是一种基于事件驱动的解析方式,通过逐行读取XML 文档并触发相应的事件来解析XML数据。

xml解析原理

xml解析原理

xml解析原理XML(可扩展标记语言)是一种用于存储和传输数据的标记语言。

它具有自描述性、跨平台和可扩展的特点,被广泛应用于各种领域。

而在使用XML数据时,我们需要将其解析为计算机可以理解和处理的格式。

本文将介绍XML解析的原理以及常用的解析方法。

一、XML解析原理概述XML解析过程是将XML文档转化为计算机可以读取和操作的数据结构的过程。

XML解析器会按照一定的规则对XML文档进行解析,并将其转换为内存中的树形结构,常用的树形结构包括DOM(文档对象模型)和SAX(简单API for XML)。

DOM解析器会将整个XML文档加载到内存中,并构建一颗树形结构,开发者可以通过操作树节点的方式读取和修改XML数据。

DOM 解析器适用于XML文档较小的情况,但在处理大型XML文档时,会占用较大的内存资源。

SAX解析器则是一种基于事件驱动的解析方法,它不会将整个XML文档加载到内存中,而是顺序地读取XML文档,当遇到特定事件(如标签的开始和结束)时触发相应的处理方法。

SAX解析器适用于处理大型XML文档,但对于复杂的XML文档结构,操作起来相对繁琐。

二、DOM解析器DOM解析器是常用的XML解析方法之一。

其解析过程包括以下几个步骤:1. 加载XML文档:DOM解析器会读取XML文档,并将其加载到内存中。

2. 构建文档对象模型:解析器会根据XML文档的结构构建一颗树形结构,即文档对象模型。

树的每个节点代表XML文档中的一个元素、属性或文本。

3. 遍历和操作节点:开发者可以通过遍历和操作节点的方式读取和修改XML数据。

解析器提供了一系列的API方法,如获取节点的名称、值、属性等信息,以及增删改查节点等操作。

4. 释放内存资源:当完成对XML文档的操作后,解析器需要释放内存资源,以便其他程序或进程使用。

DOM解析器相对简单易用,适用于较小的XML文档。

但当XML文档较大时,会占用较多的内存资源,并且解析速度较慢。

Java XML处理解析和生成XML数据

Java XML处理解析和生成XML数据

Java XML处理解析和生成XML数据Java作为一种广泛使用的编程语言,提供了丰富的API和工具来处理和操作XML数据。

本文将介绍Java中处理和解析XML数据的基本方法,并探讨如何使用Java生成XML数据。

一、XML简介XML(可扩展标记语言)是一种用于描述数据的标记语言,它的设计目标是传输数据而不仅仅是显示数据。

XML以一种结构化的方式存储数据,使得数据具有良好的可读性和可扩展性。

二、XML解析XML解析是指将XML数据转换为Java程序可以理解和处理的格式。

Java提供了几种XML解析方法,包括DOM(文档对象模型)、SAX(简单API for XML)和StAX(流API for XML)。

1. DOM解析DOM解析是最常用和最常见的XML解析方法之一。

DOM将XML文档视为一个树形结构,通过解析整个文档并将其加载到内存中,以方便对数据的操作和访问。

使用DOM解析XML的基本步骤如下:(1)创建一个DocumentBuilder对象。

(2)使用DocumentBuilder对象的parse()方法解析XML文件,返回一个Document对象。

(3)通过Document对象获取XML文件中的节点和元素。

以下是一个使用DOM解析XML的示例代码:```DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document document = builder.parse(new File("example.xml"));// 获取根节点Element rootElement = document.getDocumentElement();// 获取子节点NodeList nodeList = rootElement.getElementsByTagName("book");for (int i = 0; i < nodeList.getLength(); i++) {Element bookElement = (Element) nodeList.item(i);String title =bookElement.getElementsByTagName("title").item(0).getTextContent( );String author =bookElement.getElementsByTagName("author").item(0).getTextContent();System.out.println("Title: " + title + ", Author: " + author);}```2. SAX解析SAX解析是一种基于事件驱动的解析方法。

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

使用要导入dom4j-1.6.1.jar文件
我的dom4j文件在
讲解
生成xml 1:先通过DocumentHelper类的.createDocument()方法生成Document文件2:接着通过DocumentHelper类的createElement("根节点字符串形式")创建根节点
3:通过通过生成的Document的实例的setRootElement(根节点)设置根节点
4:接着可以通过Document的实例的getRootElement()方法得到根节点
5:接着通过根节点(Element类的实例)的.addElement("子节点的字符串形式")添加子节点
6:通过节点类(Element类的实例)的setText("字符串“)设置节点对应的值
7:通过Document类的实例的.asXML();的方式的得到xml字符串;
(注意:xml 是字符串String的形式。

可以设置几个同名的根节点(<user>username1<user><<user>username2<user>)
解析时通过Elment的.elementIterator("user");方法得到迭代器

解析xml 1:通过new SAXReader();得到SAXReader的一个实例
2:通过StringReader(参数是字符串)将xml字符串转化为一个Reader字符输入流
3:通过SAXReader的实例.read(参数是个Reader)得到得到Document
4:通过Document的getRootElement()方法得到根节点(Element类的实例)
5:通过根节点的element("子节点的字符串形式")方法得到子节点
(若有多个同名子节点通过根节点的.elementIterator("user")得到同名节点迭代器)6:通过节点的getTxt();方法得到节点的值
生成xml 例子:
private static Document constructDocument()//此处会被下面调用
{
Document document = DocumentHelper.createDocument();
Element root = DocumentHelper.createElement("message");
document.setRootElement(root);
return document;
}
document文件。

结果是下面的形式
<message>
</message>
将字符串转化成一个xml文件的一部分
public static String constructLoginXML(String username)
{
Document document = constructDocument();//调用上面个的方法
Element root = document.getRootElement();
Element type = root.addElement("type");
type.setText("1");
Element user = root.addElement("user");
user.setText(username);
return document.asXML();
}
<message>
<type>1</type>
<user>参数username</user>
</message>
解析xml 例子:
public static String extractUsername(String xml){
try{
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new StringReader(xml));
Element user = document.getRootElement().element("user");
return user.getText();
}
catch(Exception ex){
}
return null;
}。

相关文档
最新文档