对于XML进行解析,我们需要调用第三方提供的接口,对XML文档进行解析;

对于XML处理方面,W3C有两种解决方法:

(1)DOM(Document Object Model):

(2)SAX(Simple API for XML)

DOM介绍:

特点:先将xml文档解析成dom树,并放入内存,能够随机访问任意节点。

缺点:因为需要放入内存操作,所以对文件大小有限制。

DOM位于org.w3c.dom包中。

一、3个核心的接口:

接口所在包:

import  javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;

(1)Document:是整个文档的根结点。只有取得了Document结点,才能够对文档操作。

常用方法:

(1)Element elem = document.createElement("elem");     //创建一个结点

(2)Attribute attr = document.createAttribute("attr");       // 创建一个属性

(3)Text t = document.createTextNode("text");          //创建一个文本节点

(4)NodeList list = document.getElementsByTagName("...");   //寻找某个结点


(2)Node:DOM树是由结点组成,因此结点是很重要的。

常用方法:

(1)appendChild(Node child);      //添加子节点

(2)getFirstChild();                 //获得第一个子节点

(3)getNodeValue();           //得到节点的值

(4)hasChildNodes();         //是否还有子节点

(3)NodeList:是由Node组成的一个List。

常用方法:

(1)Node item(int x);              //获得第几个节点

(2)getLength();          // 获得list的长度

如果要获得Document对象,需要:

------------------------------------------------------------

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

DocumentBuilder builder = factory.newDocumentBuilder();

Document doc = builder.parse("....");获得doc

------------------------------------------------------------

生成xml文件方法:需要TransformerFactory,Transformer,StreamResult,DOMSource。

方法:

Document doc = builder.newDocument();

生成DOM树

StreamResult result = new StreamResult(new File("..."));

DOMSource source = new DOMSource(doc);

TransformerFactory factory  = TransformerFactory.newInstance();

Transformer t = factory.newTransformer();

t.transform(source,result);即可


<?xml version="1.0" encoding="GBK"?>
<persons><person><name>xiazdong</name><age>20</age><school>ecnu</school></person><person><name>xzdong</name><age>15</age><school>nanyang</school></person>
</persons>

读取文档信息:

import org.w3c.dom.*;
import javax.xml.parsers.*;
public class DOMDemo01{public static void main(String args[])throws Exception{DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document doc = builder.parse("demo.xml");NodeList plist = doc.getElementsByTagName("person");for(int i=0;i<plist.getLength();i++){Element elem = (Element)plist.item(i);System.out.println("姓名:"+elem.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());System.out.println("年龄:"+elem.getElementsByTagName("age").item(0).getFirstChild().getNodeValue());System.out.println("学校:"+elem.getElementsByTagName("school").item(0).getFirstChild().getNodeValue());}}
}

生成XML文档:

import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import java.io.*;
public class DOMDemo02{public static void main(String args[])throws Exception{DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document doc = builder.newDocument();Element person = doc.createElement("person");Element age = doc.createElement("age");Element name = doc.createElement("name");Text xiazdong = doc.createTextNode("xiazdong");Text ageText = doc.createTextNode("15");age.appendChild(ageText);name.appendChild(xiazdong);person.appendChild(name);person.appendChild(age);doc.appendChild(person);DOMSource source = new DOMSource(doc);TransformerFactory tf = TransformerFactory.newInstance();Transformer t = tf.newTransformer();StreamResult result = new StreamResult(new File("output.xml"));t.transform(source,result);}
}

生成后xml文档结构:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<person><name>xiazdong</name><age>15</age>
</person>

SAX介绍:

只能读取,不能生成或改变,并且只能遍历。

缺点:只能读取。

SAX的主要方法有5个:

(1)public void startDocument()throws SAXException;

(2)public void endDocument()throws SAXException;

(3)public void startElement(String uri,String localname,String name,Attribute attr)throws SAXException;

(4)public void endElement(String uri,String localname,String name)throws SAXException;

(5)public void characters(char[]ch , int start,int length)throws SAXException;


SAX属于触发类型的,当遇到文档开头就触发(1)方法,遇到元素的开头触发(3)方法;

因此如果我们需要使用SAX,必须要自己实现一个SAX解析器;

注意:解析器必须继承DefaultHandler;

实现完解析器后,则可以做操作:

SAXParserFactory factory = SAXParserFactory.newInstance();

SAXParser parser = factory.newSAXParser();

parser.parse("文件路径",new MySAXParser());


即可;

XML解析工具:

(1)DOM4J

DOM4J是一个XML操作的包,为了提供给用户更简便的操作XML。

以下是生成一个XML文件的代码:

Document doc = DocumentHelper.createDocument();

Element name = doc.addElement("name");

Element first = name.addElement("firstname");

Element second = name.addElement("secondname");

first.setText("xia");

second.setText("second");

OutputFormat format = OutputFormat.createPrettyPrint();

format.setEncoding("gb2312");

XMLWriter writer = new XMLWriter(new FileOutputStream("out.xml"),format);

writer.write(doc);

writer.close();

以下是读取一个XML文件的代码:

SAXReader reader = new SAXReader();

Document doc = reader.read(new File("out.xml"));

Element root = doc.getRootElement();

Iterator iter  = root.elementIterator();

Element elem = (Element)iter.next();

String str = elem.elementText("first");

(2)JDOM:也是一个非常好的解析工具,但是性能上比DOM4J差了不少,所以不用。

Javascript中运用DOM:把html想象成一个DOM树。

这里通过id进行查找。

var elem = document.getElementById("id");

elem.innerHTML

生成一个<input type = "button" value = "button"/>过程:

var form = document.getElementById("form");            //获得表单节点

Element button = document.createElement("input");        //创建一个节点

button.setAttribute("type","button");        //设置属性

button.setAttribute("value","button");    //设置属性

form.appendChild(button);        //添加form的子节点

转载于:https://www.cnblogs.com/xiazdong/archive/2011/10/03/3058366.html

XML与java的应用相关推荐

  1. 用 XStream 序列化/反序列化 XML 为 Java 对象(实例)

    用 XStream 序列化/反序列化 XML 为 Java 对象(实例) Posted on 2007-06-05 19:06 Stephen Wong 阅读(1224) 评论(0)  编辑 收藏 网 ...

  2. Java 中的 XML:Java 文档模型的用法

    Java 中的 XML:Java 文档模型的用法 英文原文 内容: 代码对比 DOM JDOM dom4j Electric XML XPP 结束语 下一次... 参考资料 关于作者 对本文的评价 相 ...

  3. xml与java代码相互装换的工具类

    2019独角兽企业重金招聘Python工程师标准>>> 这是一个java操作xml文件的工具类,最大的亮点在于能够通过工具类直接生成xml同样层次结构的java代码,也就是说,只要你 ...

  4. 使用xml及java代码混合的方式来设置图形界面

    参考<疯狂android讲义>第2版2.1节 设置android的图形界面有三种方法: 1.使用纯xml文件 2.使用纯java,代码臃肿复杂,不建议使用 3.使用xml与java混合,前 ...

  5. xml与java对象转换 -- XStreamAlias

    @XStreamAlias使用 一. 特点: 简化的API;  无映射文件;  高性能,低内存占用;  整洁的XML;  不需要修改对象;支持内部私有字段,不需要setter/getter方法  提供 ...

  6. 使用UltraEdit32编辑器格式化源码功能 XML、Java、C/C++、C#

    From: http://www.cnblogs.com/zcy_soft/archive/2011/01/18/1938509.html UE编辑器一直是我编程和编辑文本的好帮手,对它映像最深刻的功 ...

  7. java xml amp_Javaamp;Xml教程(十一)JAXB实现XML与Java对象转换

    JAXB是Java Architecture for XML Binding的缩写,用于在Java类与XML之间建立映射,可以帮助开发人员非常方便的將XML和Java对象进行相互转换. 本文以一个简单 ...

  8. 读取、回收和重用:使用 Excel、XML 和 Java 技术轻松搞定报告,第 2 部分

    本周您推脱老板的 #432 创新理由了吗?您是否尝试过推脱? 本系列的其他文章 读取.回收和重用:使用 Excel.XML 和 Java 技术轻松搞定报告,第 1 部分 有幸的是,您不必推脱.本系列的 ...

  9. Xsd文件验证xml的java实现

    xsd文件验证xml的java实现 今天在修改数据交换平台时候,看见其中使用此技术 import java.io.File; import java.io.IOException; import ja ...

  10. 使用castor实现xml和java对象的转换

    对于xml和java对象的转换这里用castor进行转换,当然还有别的方式 方式一:castor和xml映射文件配合 首先提供需要解析的XML(内容不重要,重要的是格式) <?xml versi ...

最新文章

  1. mobsdk线上崩溃事故报告_重大事故!IO问题引发线上20台机器同时崩溃
  2. c++ 将引用赋值给引用_5分钟掌握 Python 对象的引用
  3. 关于卷积神经网络可视化的一点心得
  4. 这个SSRF 漏洞很酷
  5. AngularJS控制器中的#39;this#39;与$ scope
  6. 几个好用的资源下载网址
  7. Alexa世界排名作弊分析
  8. 这些中国顶级黑客带来的价值远比负面影响多!
  9. 论文解读 - 城市自动驾驶车辆运动规划与控制技术综述 (第1部分)
  10. 五大领域总目标指南_幼儿园五大领域活动总目标
  11. windows下kafka环境完整搭建,Python调用kafka构建完整实例分析与应用
  12. SDUTOJ(2109)找女朋友
  13. 应聘中巧用积极的心理暗示
  14. 方舟原始恐惧mod生物代码_《方舟:恐惧进化4》登场,各种幽灵生物你成功驯服了吗?...
  15. 反编译打包apk后无法安装正版apk提示:Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]
  16. outlook邮件服务器保存设置,邮件Outlook设置本地存储的方法--
  17. 机器学习新-统计机器学习第二版
  18. ora-19510/ora-27037
  19. PCB线路板中,有铅喷锡和无铅喷锡应如何选择?2021-11-16
  20. Git码云项目开发中常用分支

热门文章

  1. ES6——Symbol
  2. LeetCode(617)——合并二叉树(JavaScript)
  3. LeetCode(237)——删除链表中的节点(JavaScript)
  4. Error:npm WARN enoent ENOENT: no such file or directory, open ‘C:\Users\XX\package.json‘son‘
  5. 比较默认对象和默认约束的异同_UE4对象类类型引用和类默认对象(Class Default Object,简称CDO)...
  6. 现在很多人到农村买桑叶来吃,桑叶真的可以吃吗?
  7. 【小姨子】 基本信息(拼音,读音等)
  8. V商变现的逻辑和自媒体变现的逻辑
  9. 想建出优质的社群,必须懂得社群的本质
  10. 创业失败感悟第二十九天