Java实现DOM文档操纵和XML文件相互转换
副标题#e#
本文扼要描写了DOM的观念和内部逻辑布局,实例报告DOM文档操纵和XML文件相互转换的java实现进程。
1.DOM简介
今朝,W3C已于2000年11月13日推出了类型DOM level 2。文档工具模子(DOM)是HTML和XML文档的编程接口类型,它与平台和语言是无关的,因而可以用各类语言在各类平台上实现。该模子界说了THML和XML文件在内存中的逻辑布局(即为文档),提供了会见、存取THML和XML文件的要领。操作DOM类型,可以实现DOM文档和XML之间的彼此转换,遍历、操纵相应DOM文档的内容。可以说,要自由的哄骗XML文件,就要用到DOM类型。
2.DOM内部逻辑布局
DOM文档中的逻辑布局可以用节点树的形式举办表述。通过对XML文件的理会处理惩罚,XML文件中的元素便转化为DOM文档中的节点工具。DOM的文档节点有Document、Element、Comment、Type等等节点范例,个中每一个DOM文档必需有一个Document节点,而且为节点树的根节点。它可以有子节点,可能叶子节点如Text节点、Comment节点等。任何的名目精采的XML文件中的每一个元素均有DOM文档中的一个节点范例与之对应。操作DOM接口将XML文件转化成DOM文档后,我们就可以自由的处理惩罚XML文件了。
3.java中的DOM接口
DOM类型提供的API的类型,今朝Sun公司推出的jdk1.4测试版中的java API遵循了 DOM level 2 Core推荐接口的语义说明,提供了相应的java语言的实现。
在org.xml.dom中,jkd1.4提供了Document、DocumentType、Node、NodeList、Element、Text等接口,这些接口均是会见DOM文档所必需的。我们可以操作这些接口建设、遍历、修改DOM文档。
在javax.xml.parsers中,jkd1.4提供的DoumentBuilder和DocumentBuilderFactory组合可以对XML文件举办理会,转换成DOM文档。
在javax.xml.transform.dom和javax.xml.transform.stream中,jdk1.4提供了DOMSource类和StreamSource类,可以用来将更新后的DOM文档写入生成的XML文件中。
4.例程
4.1 将XML文件转化成DOM文档
这个进程是得到一个XML文件理会器,理会XML文件转化成DOM文档的进程。
Jdk1.4中,Document接口描写了对应于整个XML文件的文档树,提供了对文档数据的会见,是该步调的方针。Document接口可以从类DocumentBuilder中获取,该类包括了从XML文档得到DOM文档实例的API。XML的理会器可以从类DocumentBuilderFactory中获取。在jdk1.4中,XML文件转化成DOM文档可以有如下代码实现:
//得到一个XML文件的理会器
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//理会XML文件生成DOM文档的接口类,以便会见DOM。
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse( new File(FileName) );
4.2 遍历DOM文档
得到接口类document实例后,可以对DOM的文档树举办会见。要遍历DOM文档,首先要得到Root元素。然后得到Root元素的子节点列表。这里通过递归的要领实现遍历的目标。
//得到Root元素
Element element = document.getDocumentElement();
//得到Root元素的子节点列表
nodelist = element.getChildNodes();
//用递归要领实现DOM文档的遍历
GetElement(nodelist);
个中GetElement要领实现如下:
public void GetElement(NodeList nodelist){
Node cnode;
int i,len;
String str;
if(nodelist.getLength() == 0)
// 该节点没有子节点
return;
}
for(i=0;i 1)
System.out.println(" "+str+" "+len);
}
}
}
留意:上面的代码只是显示Node范例和Text范例的工具。它们的范例标识别离是1和3。
#p#副标题#e#
4.3 修改DOM文档
修改DOM文档的API在DOM level 2 Core类型中做了说明,jkd1.4中的org.xml.dom中实现了这些API。修改DOM文档操纵主要会合在Document、Element、Node、Text等类中,这里给出的例子中是在理会出的DOM文档中增加一系列工具,对应与在XML文件中增加一笔记录。
// 得到Root工具
Element root = document.getDocumentElement();
// 在DOM文档中增加一个Element节点
Element booktype = document.createElement("COMPUTES");
//将该节点转化成root工具的子节点
root.appendChild(cdrom);
//在DOM文档中增加一个Element节点
Element booktitle = document.createElement("Title");
//将该节点转化成booktype工具的子节点
booktype.appendChild(booktitle);
//在DOM文档中增加一个Text节点
Text bookname = document.createTextNode("understand Corba");
//将该节点转化成bookname工具的子节点
booktitle.appendChild(bookname);
4.4 将DOM文档转化成XML文件
#p#分页标题#e#
// 得到将DOM文档转化为XML文件的转换器,在jdk1.4中,有类TransformerFactory
// 来实现,类Transformer实现转化API。
TransformerFactory tfactory = TransformerFactory.newInstance();
Transformer transformer = tfactory.newTransformer();
// 将DOM工具转化为DOMSource类工具,该工具表示为转化成此外表达形式的信息容器。
DOMSource source = new DOMSource(document);
/* 得到一个StreamResult类工具,该工具是DOM文档转化成的其他形式的文档的容器,
可以是XML文件,文本文件,HTML文件。这里为一个XML文件。*/
StreamResult result = new StreamResult(new File(“text.xml”));
// 挪用API,将DOM文档转化成XML文件。
transformer.transform(source,result);
这里提供了该例程的完整措施,该例程在windows 2000中jdk1.4情况中运行通过。
以上给出了一个例子,读者可以从中相识到对DOM操纵的思路。因为对DOM的操纵均遵循了DOM类型,所以也合用于其它语言对DOM的处理惩罚。