利用Node修改数据

从flowers.xml文件中价格大于15的鲜花删除,将其他鲜花的价格减去5

用到的Node的API包括:

1)Node removeChild(Node oldChild):从子节点列表中移除oldChild所指示的节点,并将其返回

2)void setTextContent(String textContent):设置此节点的文本内容

flowers.xml文件:

 

<?xml version="1.0" encoding="UTF-8"?>
<flowers>
  <flower id="1">
     <name>玫瑰</name>
     <price>10</price>
  </flower>
  <flower id="2">
     <name>百合</name>
     <price>20</price>
  </flower>
   <flower id="3">
     <name>兰花</name>
     <price>30</price>
  </flower>
</flowers>

WriteNode.java文件

 

import java.io.File;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
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.Node;
import org.w3c.dom.NodeList;
public class WriteNode {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
		DocumentBuilder db=dbf.newDocumentBuilder();
		Document doc=db.parse("flowers.xml");
		//查询所有价格
		NodeList list=doc.getElementsByTagName("price");
		ArrayList arrayList=new ArrayList();
		Node flowers=null;
		for(int i=0;i<list.getLength();i++){
			Node priceNode=list.item(i);
			String strPrice=priceNode.getTextContent();
			double price=Double.parseDouble(strPrice);
			//获得该价格的父节点
			Node flower=priceNode.getParentNode();
			//获得flower的父节点
			flowers=flower.getParentNode();
			if(price>15){
				arrayList.add(flower);
			}else{
				//修改价格
				String newPrice=String.valueOf(price-5);
				priceNode.setTextContent(newPrice);
			}
		}
		for(int j=0;j<arrayList.size();j++){
			Node flower=(Node)arrayList.get(j);
			//从flowers中删除flower
			flowers.removeChild(flower);
		}
		//保存文件
				TransformerFactory tf=TransformerFactory.newInstance();
				Transformer transformer=tf.newTransformer();
				DOMSource source=new DOMSource(doc);  //将Document对象封装为DOM源
				File file=new File("newFlowers.xml");
				StreamResult result=new StreamResult(file); //通过StreamResult包装File对象,确定输出的目标
				transformer.transform(source, result);  //利用Transformer的transform方法将源输出到目标
				//System.out.println("保存成功!!");
	}

}

运行效果newFlowers.xml文件

 

转载于:https://my.oschina.net/u/137892/blog/52592

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值