文档章节

利用Node修改数据

藍色的海
 藍色的海
发布于 2012/04/06 20:57
字数 349
阅读 43
收藏 0

从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文件

 

© 著作权归作者所有

下一篇: XML文件保存
藍色的海
粉丝 3
博文 19
码字总数 7205
作品 0
广州
其他
私信 提问
elasticsearch开发文档(五)——Elasticsearch数据交互之JAVA篇

Elasticsearch提供两个内置的client给JAVA API进行数据交互使用: node client:本地集群的非数据结点,不保存任何数据信息,只是将请求发送给集群中存活的节点。 Transport client:可以使用...

皮蛋瘦肉粥里没有粥
2016/07/07
109
0
node+express实现图片上传功能

概述 本篇文章适用于node刚刚入门的读者。 本篇文章使用node+express实现了一个简单的图片上传功能:用户点击图片上传,会跳转到上传成功页面并展示上传的图片。 前言 一直想找资料入门node,...

深蓝一人
02/18
0
0
TypeScript + Webpack + Koa 搭建 React 服务端渲染

原理: 利用 webpack 打包能在 node 运行的 React 代码,利用 将 React 代码渲染成 html 字符串返回给客户端 利用 webpack 打包浏览器运行的 React 代码,在客户端用 hydrate 激活(添加事件...

我可以
04/18
0
0
Napa.js 简介

原文地址:github.com/Microsoft/n… 本文介绍 Napa.js 的核心概念,带领大家探索 Napa.js 是如何运转起来的。关于它的由来和开发初衷,可以阅读 这篇文章 简介 Zone Zone 是 Napa.js 中的核...

meikidd
2017/10/20
0
0
Vue项目分环境打包的实现步骤

在项目开发中,我们的项目一般分为开发版、测试版、Pre版、Prod版。Vue-cli的默认环境一只有dev和prod两个,之前每次要发布测试版或Pre版都是修改了源码中API地址后打包,这样很麻烦。如果能...

peakedness丶
2018/12/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

抽象同步队列AQS——AbstractQueuedSynchronizer锁详解

AQS——锁的底层支持 谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资...

须臾之余
今天
2
0
springboot配置百度UEditor 富文本详解

富文本简介 UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码... 准备工作 ueditor需要单独文...

wotrd
昨天
3
0
mysql 5.7之my.cnf配置大全

[client]port = 3306socket = /tmp/mysql.sock[mysqld]###############################基础设置######################################Mysql服务的唯一编号 每个mysql服务...

Online_Reus
昨天
2
0
MAVEN打包时引入外部链接的包

1.项目引入了ORACLE的jar包,MAVEN配置如下 2.打jar包的时候需要指定下main入口函数mainClass <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> ......

Cobbage
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部