W3C 解析XML

1 篇文章 0 订阅
W3C解析  负责  XML


package com.itheima.xml;

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Iterator;
import java.util.Vector;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;

import com.itheima.xml.bean.Plant;

public class TextW3CParseXML {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String fileName="F:/plant.xml";  //已经存在的 xml文件
		TextW3CParseXML t=new TextW3CParseXML();
		try {
			Vector v=t.readXMLFile(fileName);
			Iterator it=v.iterator();
			while(it.hasNext()){
				Plant s=(Plant)it.next();
				System.out.println(s.getId()+"\t"+s.getName()+"\t"+s.getDesc());
			}
			
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println("读取XML文件出错:"+e.getMessage());
		}
		String outfile="F:/plant1.xml";  //复制到这个文件中
		t.writeXMLFile(outfile);
	}
	
	Vector plant_Vector;
	
	private Vector readXMLFile(String fileName) throws Exception{
		//获取dom解析器的工厂实例 
		DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
		
		DocumentBuilder build=dbf.newDocumentBuilder();
		
		Document doc=build.parse(fileName);
		
		Element root=doc.getDocumentElement();
		NodeList plantList=root.getElementsByTagName("plant");
		plant_Vector=new Vector();
		System.out.println(plantList.getLength());
		
		for (int i = 0; i < plantList.getLength(); i++) {
			Element element=(Element)plantList.item(i);
			
			Plant plant=new Plant();
			plant.setId(element.getAttribute("id"));
			
			NodeList names=element.getElementsByTagName("name");
			Element e=(Element)names.item(0);
			Node t=e.getFirstChild();
			plant.setName(t.getNodeValue());
			
			NodeList desc=element.getElementsByTagName("description");
			e=(Element)desc.item(0);
			t=e.getFirstChild();
			plant.setDesc(t.getNodeValue());
			
			plant_Vector.add(plant);
		}
		return plant_Vector;
		
	}
	
	//将文档写入到XML文件中
	public static void callWriteXmlFile(Document doc,Writer w,String encoding){
		try {
			Source source=new DOMSource(doc);
			Result result=new StreamResult(w); //创建结果对象
			Transformer transformer=TransformerFactory.newInstance().newTransformer(); //创建转换器
			transformer.setOutputProperty(OutputKeys.ENCODING, encoding);
			transformer.transform(source, result); //对文档进行转换
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	//将 XML文件复制到指定文件
	private void writeXMLFile(String fileName){
		DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
		DocumentBuilder builder=null;
		try {
			builder=dbf.newDocumentBuilder();
		} catch (ParserConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		Document doc=builder.newDocument();
		Element root=doc.createElement("plants");
		doc.appendChild(root);
		for (int i = 0; i < plant_Vector.size(); i++) {
			Plant plant=(Plant)plant_Vector.get(i);
			Element element=doc.createElement("plant");
			element.setAttribute("id", plant.getId());
			root.appendChild(element);
			
			Element name=doc.createElement("name");
			element.appendChild(name);
			Text tname=doc.createTextNode(plant.getName());
			name.appendChild(tname);
			
			Element desc=doc.createElement("description");
			element.appendChild(desc);
			Text tdesc=doc.createTextNode(plant.getDesc());
			desc.appendChild(tdesc);
			
		}
		try {
			FileOutputStream fos=new FileOutputStream(fileName);  //创建文件输出流
			
			OutputStreamWriter outWriter=new OutputStreamWriter(fos);
			callWriteXmlFile(doc, outWriter, "gb2312");
			outWriter.close();
			fos.close();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
		
	}
	

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值