XML相关概念和操作

javax.xml.parsers包

此包处理DOM文档的类主要有2个:DocumentBuilder DocumentBuilderFactory
1. DocumentBuilder 类
此类是一个抽象类。利用该类的实例对象,我们可以获取xml文档的一个Document,下面是其常用方法
abstract Document newDocument() 创建DOM文档的一个实例来生成DOM树
Document parse(File file) 将file文件解析为xml文档并返回一个DOM文档对象
Document parse(InputStream is) 将输入流is解析为xml文档并返回一个DOM对象
Document parse(String uri) 将给定的uri的内容解析为xml文档并返回一个DOM对象
void reset() 重置DocumentBuilder对象
此类的实例需要通过DocumentBuilderFactory.newDocumentBuilder()来实现
2. DocumentBuilderFactory类
通过此类定义的方法,java应用程序就能够获得一个生成DOM对象树的解析器,从而对xml文档进行各种处理
其有两个重要的方法:
abstract DocumentBuilder newDocumentBuilder() 创建一个DocumentBuilder实例对象
static DocumentBuilderFactory newInstance() 获取DocumentBuilderFactory的实例对象
例如:
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
Document doc=db.parse("students.xml");
org.w3c.dom包
为DOM提供了一系列应用程序编程接口API
Document 整个文档 节点类型(整型值) DOCUMENT_NODE 节点名称 #document 节点的值 null
Element 元素 节点类型(整型值) ELEMENT_NODE 节点名称 标记名称 节点的值 null
Attr 属性 节点类型(整型值) ATTRIBUTE_NODE 节点名称 属性名称 节点的值 属性值
TEXT 文本 节点类型(整型值) TEXT_NODE 节点名称 #text 节点的值 文本值
1. Node接口
此接口是DOM的主要数据类型,表示文档树中的单个节点,是Document Element Attr TEXT 的超类。Node接口定义了大量
方法来操作xml文档的节点
2. Document接口
此接口继承自Node接口,表示整个xml文档,Document是文档树的根,并提供了对文档数据的基本访问方法,要获得Document对象
需要利用文档构造器DocumentBuilder
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
Document doc=db.parse("students.xml");
现在就可以创建文档元素了
doc.createElement("student");
或者创建指令
doc.appendChild(doc.createProcessingInstruction("xml-stylesheet","type=\"text/css\" href=\"students.css\""))
3. Element接口
此接口继承Node接口,表示xml文档的一个元素,例如下面的代码创建了根元素students及子元素student,并设置其属性sn为01
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
Document doc=db.parse("students.xml");
Element root=doc.createElement("students");
doc.appendChild(root);
Element student1=doc.createElement("student");
student1.setAttribute("sn","01");
4. Attr接口
此接口继承Node接口,表示xml文档中元素的属性。
5. Text 接口
此接口扩展自CharacterData(继续自Node接口)接口,表示元素或者属性的内容,其主要方法有:
String getWholeText() 返回所有文本
boolean isElementContentWhitespace() 节点是否包含空白字符
Text replaceWholeText(String content) 将节点文本替换为指定点的文本
例如: 将name元素的文本内容赋值为”zhang san“
6. NodeList 接口
此接口代表所有节点的有序集合,其中的节点可以通过基于0的整数索引进行访问,其主要方法有:
int getLength() 列表中的节点数
Node item(int index) 返回集合中第index个节点
javax.xml.transform.dom包
此包实现了DOM转换的API,包中的DOMSource类可以将DOM文档指定为输入树的源,从而实现将源转化为结果树的目标
例如我们可以将内存中的树保存为硬盘上的树。DOMSource还提供了一个常用的构造方法
DOMSource(Node node) 该得到 创建带有DOM节点的新输入源,例如: DOMSource source=new DOMSource(doc);
其有两个常用的方法:
Node getNode() 获取源树的节点
void setNode(Node node) 设置源树的节点
下面创建一个源树并设置源树的节点:
DOMSource source=new DOMSource();
source.setNode(doc);
javax.xml.transform.stream包
此包提供了用于流转换的API,我们感兴趣的是该包中的StreamResult类,该类是转换结果的持有者,也就是硬盘的.xml文件
其常用的构造方法如下: StreamResult(OutputStram os) 该方法提供指定输出流构造对象
也可以通过该类提供的setOutputStream(OutputStram os)方法构造对象 例如: StreamResult result=new StreamResult(); result.setOutputStream(new PrintWrite("a.xml"));
javax.xml.transform包
此包但当了执行转换的的角色,并提供了三个重要的类:OutputKeys,Transformer和TransformerFactory
1. TransformerFactory类
此类是一个转换工厂,用于创建Transform转换器
例如: 创建一个转换器工厂类
TransformerFactory factory=TransformerFactory.newInstance();
factory.setAttribute("indent-number",2);
2. Transform 类
此类是一个抽象类,具体否则将源树转换为结果树
Transformer transformer=factory.newTransformer(); System.out.println("创建转换器");
transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,"s.dtd");
transformer.setOutputProperty(OutputKeys.INDENT,"yes");
transformer.transform(source,result);
3. OutputKeys类
此类用于设置Transformer的输出属性,
 
 
  1. importjava.io.*;
  2. importjavax.xml.parsers.*;
  3. importjavax.xml.transform.*;
  4. importjavax.xml.transform.dom.DOMSource;
  5. importjavax.xml.transform.stream.StreamResult;
  6. importorg.w3c.dom.*;
  7. publicclassjjtt{
  8. publicstaticvoidmain(Stringargs[]){
  9. DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();System.out.println("创建对象DocumentBuilderFactory,使用DocumentBuilderFactory.newInstance()方法");
  10. try{
  11. DocumentBuilderdb=dbf.newDocumentBuilder();System.out.println("创建newDocumentBuilder对象使用newDocumentBuilder();方法");
  12. Documentdoc=db.newDocument();System.out.println("创建Document对象使用db.newDocument();方法");
  13. Elementroot=doc.createElement("students");System.out.println("创建element元素");
  14. doc.appendChild(root);
  15. //doc.appendChild
  16. Elementstudent1=doc.createElement("student");
  17. student1.setAttribute("sn","01");
  18. Elementname1=doc.createElement("name");
  19. Texttext1=doc.createTextNode("zhang");
  20. name1.appendChild(text1);
  21. student1.appendChild(name1);
  22. Elementage1=doc.createElement("age");
  23. text1=doc.createTextNode("19");
  24. age1.appendChild(text1);
  25. student1.appendChild(age1);
  26. root.appendChild(student1);
  27. Elementstudent2=doc.createElement("student");
  28. student2.setAttribute("sn","002");
  29. Elementname2=doc.createElement("name");
  30. Texttext2=doc.createTextNode("li");
  31. name2.appendChild(text2);
  32. student2.appendChild(name2);
  33. Elementage2=doc.createElement("age");
  34. text2=doc.createTextNode("21");
  35. age2.appendChild(text2);
  36. student2.appendChild(age2);
  37. root.appendChild(student2);
  38. DOMSourcesource=newDOMSource();System.out.println("创建源");
  39. source.setNode(doc);System.out.println("使用source.setNode(doc);方法设置源");
  40. PrintWriterpw=newPrintWriter(newFileOutputStream("a.xml"));
  41. StreamResultresult=newStreamResult(pw);System.out.println("创建结果集");
  42. TransformerFactoryfactory=TransformerFactory.newInstance();System.out.println("创建对象TransformerFactory转换工厂,使用TransformerFactory.newInstance()方法");
  43. factory.setAttribute("indent-number",2);
  44. Transformertransformer=factory.newTransformer();System.out.println("创建转换器");
  45. transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,"s.dtd");
  46. transformer.setOutputProperty(OutputKeys.INDENT,"yes");
  47. transformer.transform(source,result);System.out.println("进行转换");
  48. System.out.println("完成");
  49. }catch(Exceptione){
  50. e.printStackTrace();
  51. }
  52. }
  53. }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇