`
yuelong
  • 浏览: 33157 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

DOM生成、解析XML文件

    博客分类:
  • Java
阅读更多

所有现代浏览器都有读取和操作 XML 的内建 XML 解析器。解析器把 XML 载入内存,然后把它转换为可通过 JavaScript 访问的 XML DOM 对象

 

解析器读入整个文档,然后构建一个驻留内存的树结构,使用 DOM 接口来操作这个树结构。

优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;

缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)

 

生成Xml文档
解析器通过在内存中建立和XML结构相对应的树状结构数据,使得应用程序可以方便地获得XML文件中的数据。

调用newDocument()可得到一个Document节点

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document= builder.newDocument();

 构建Document内容

Element root = this.document.createElement("employees");
this.document.appendChild(root);
Element employe = this.document.createElement("employe");
Element name = this.document.createElement("name");
name.appendChild(this.document.createTextNode("yues"));
Element age = this.document.createElement("age");
age.appendChild(this.document.createTextNode("26"));
Element sex = this.document.createElement("sex");
sex.appendChild(this.document.createTextNode("Man"));
employe.appendChild(name);
employe.appendChild(age);
employe.appendChild(sex);
root.appendChild(employe);

 使用 Transformer对象将一个Document节点变换为一个XML文件

TransformerFactory transFactory=TransformerFactory. newInstance()
Transformer transformer=transFactory. newTransformer();

将被变换的Document对象封装到一个DOMSource对象中

DOMSource domSource=new DOMSource(document);

将变换得到XML文件对象封装到一个StreamResult对象中

File file=new File("newXML.xml");
FileOutputStream out=new FileOutputStream(file);
StreamResult xmlResult=new StreamResult(out);

对象transformer 调用transform方法实施变换

transformer.transform(domSource, xmlResult);

用于修改Document的常用方法
Node接口是Document的父接口,提供了许多用来修改、增加和删除节点的方法:
Node appendChild(Node newChild) 节点调用该方法可以向当前节点增加一个新的子节点,并返回这个新节点。
Node removeChild(Node oldChild) throws DOMException 节点调用该方法删除参数指定的子节点,并返回被删除的子节点。
Node replaceChild(Node newChild, Node oldChild) 将子节点列表中的子节点 oldChild 替换为 newChild,并返回 oldChild 节点。

解析Xml文档 

 

public void paserXml(String fileName) {
		// TODO Auto-generated method stub
		try {
			this.document = builder.parse(new FileInputStream(new File(fileName)));
			NodeList employees = document.getChildNodes();
			for(int i=0;i<employees.getLength();i++){
				Node employe = employees.item(i);
				System.out.println("第"+(i+1)+"个Employee");
				NodeList employeAttrs = employe.getChildNodes();
				for(int j=0;j<employeAttrs.getLength();j++){
					Node employeAttr = employeAttrs.item(j);
					NodeList attrInfo = employeAttr.getChildNodes();
					for(int k=0;k<attrInfo.getLength();k++){
						Node info = attrInfo.item(k);
						if(info.getNodeType()==Node.ELEMENT_NODE){
							System.out.println(info.getNodeName()+":"+info.getTextContent());
						}
					}
				}
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics