javax.xml.parsers包
此包处理DOM文档的类主要有2个:DocumentBuilder DocumentBuilderFactory
1. DocumentBuilder 类
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类
其有两个重要的方法:
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
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接口
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 接口
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文件
也可以通过该类提供的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类
- importjava.io.*;
- importjavax.xml.parsers.*;
- importjavax.xml.transform.*;
- importjavax.xml.transform.dom.DOMSource;
- importjavax.xml.transform.stream.StreamResult;
- importorg.w3c.dom.*;
- publicclassjjtt{
- publicstaticvoidmain(Stringargs[]){
- DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();System.out.println("创建对象DocumentBuilderFactory,使用DocumentBuilderFactory.newInstance()方法");
- try{
- DocumentBuilderdb=dbf.newDocumentBuilder();System.out.println("创建newDocumentBuilder对象使用newDocumentBuilder();方法");
- Documentdoc=db.newDocument();System.out.println("创建Document对象使用db.newDocument();方法");
- Elementroot=doc.createElement("students");System.out.println("创建element元素");
- doc.appendChild(root);
- //doc.appendChild
- Elementstudent1=doc.createElement("student");
- student1.setAttribute("sn","01");
- Elementname1=doc.createElement("name");
- Texttext1=doc.createTextNode("zhang");
- name1.appendChild(text1);
- student1.appendChild(name1);
- Elementage1=doc.createElement("age");
- text1=doc.createTextNode("19");
- age1.appendChild(text1);
- student1.appendChild(age1);
- root.appendChild(student1);
- Elementstudent2=doc.createElement("student");
- student2.setAttribute("sn","002");
- Elementname2=doc.createElement("name");
- Texttext2=doc.createTextNode("li");
- name2.appendChild(text2);
- student2.appendChild(name2);
- Elementage2=doc.createElement("age");
- text2=doc.createTextNode("21");
- age2.appendChild(text2);
- student2.appendChild(age2);
- root.appendChild(student2);
- DOMSourcesource=newDOMSource();System.out.println("创建源");
- source.setNode(doc);System.out.println("使用source.setNode(doc);方法设置源");
- PrintWriterpw=newPrintWriter(newFileOutputStream("a.xml"));
- StreamResultresult=newStreamResult(pw);System.out.println("创建结果集");
- TransformerFactoryfactory=TransformerFactory.newInstance();System.out.println("创建对象TransformerFactory转换工厂,使用TransformerFactory.newInstance()方法");
- factory.setAttribute("indent-number",2);
- Transformertransformer=factory.newTransformer();System.out.println("创建转换器");
- transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,"s.dtd");
- transformer.setOutputProperty(OutputKeys.INDENT,"yes");
- transformer.transform(source,result);System.out.println("进行转换");
- System.out.println("完成");
- }catch(Exceptione){
- e.printStackTrace();
- }
- }
- }