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. import java.io.*; 
  2. import javax.xml.parsers.*; 
  3. import javax.xml.transform.*; 
  4. import javax.xml.transform.dom.DOMSource; 
  5. import javax.xml.transform.stream.StreamResult; 
  6. import org.w3c.dom.*; 
  7. public class jjtt{ 
  8.     public static void main(String args[]){ 
  9.         DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();  System.out.println("创建对象DocumentBuilderFactory,使用DocumentBuilderFactory.newInstance()方法"); 
  10.         try
  11.             DocumentBuilder db=dbf.newDocumentBuilder();   System.out.println("创建newDocumentBuilder对象使用newDocumentBuilder();方法"); 
  12.             Document doc=db.newDocument();                System.out.println("创建Document对象使用db.newDocument();方法"); 
  13.              
  14.             Element root=doc.createElement("students");    System.out.println("创建element元素"); 
  15.             doc.appendChild(root); 
  16.             //doc.appendChild 
  17.              
  18.             Element student1=doc.createElement("student"); 
  19.             student1.setAttribute("sn","01"); 
  20.             Element name1=doc.createElement("name"); 
  21.             Text text1=doc.createTextNode("zhang"); 
  22.             name1.appendChild(text1); 
  23.             student1.appendChild(name1); 
  24.             Element age1=doc.createElement("age"); 
  25.             text1=doc.createTextNode("19"); 
  26.             age1.appendChild(text1); 
  27.             student1.appendChild(age1); 
  28.             root.appendChild(student1); 
  29.              
  30.             Element student2=doc.createElement("student"); 
  31.             student2.setAttribute("sn","002"); 
  32.             Element name2=doc.createElement("name"); 
  33.             Text text2=doc.createTextNode("li"); 
  34.             name2.appendChild(text2); 
  35.             student2.appendChild(name2); 
  36.             Element age2=doc.createElement("age"); 
  37.             text2=doc.createTextNode("21"); 
  38.             age2.appendChild(text2); 
  39.             student2.appendChild(age2); 
  40.             root.appendChild(student2); 
  41.              
  42.             DOMSource source=new DOMSource();  System.out.println("创建源"); 
  43.             source.setNode(doc);         System.out.println("使用source.setNode(doc);  方法设置源"); 
  44.              
  45.             PrintWriter pw=new PrintWriter(new FileOutputStream("a.xml")); 
  46.             StreamResult result=new StreamResult(pw);     System.out.println("创建结果集"); 
  47.              
  48.             TransformerFactory factory=TransformerFactory.newInstance();  System.out.println("创建对象TransformerFactory转换工厂,使用TransformerFactory.newInstance()方法"); 
  49.             factory.setAttribute("indent-number",2); 
  50.              
  51.             Transformer transformer=factory.newTransformer();    System.out.println("创建转换器"); 
  52.             transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,"s.dtd"); 
  53.             transformer.setOutputProperty(OutputKeys.INDENT,"yes"); 
  54.             transformer.transform(source,result);     System.out.println("进行转换"); 
  55.             System.out.println("完成"); 
  56.         }catch(Exception e){ 
  57.             e.printStackTrace(); 
  58.         } 
  59.     } 

你可能感兴趣的:(java,xml)