DOM和XML

该博客展示了如何使用Java处理XML文件,包括添加新的书籍条目,将所有书本价格调整为原价的1.2倍,筛选价格超过10元的书籍,以及查询特定书籍(PHP)的价格。示例代码详细解释了DOM解析XML的步骤,并最终将更新后的数据保存到新的XML文件中。
摘要由CSDN通过智能技术生成

最近在学习XML,看了之前的帖子,关于Spring的文章浏览量很多,看来大家还是对新技术比较感兴趣,不过关于DOM和XML的内容也有相当的重要性,上题。

<?xml version="1.0" encoding="UTF-8"?>
<books>
<book bookid="1">
<bookname>ASP</bookname>
<bookprice>100</bookprice>
</book>
<book bookid="2">
<bookname>JAVA</bookname>
<bookprice>200</bookprice>
</book>
<book bookid="3">
<bookname>PHP</bookname>
<bookprice>300</bookprice>
</book>
</books>

这是一个名为book.xml的xml文件
1、添加第4本书的信息。
2、将所有书本价格变为原来的1.2倍。
3、查询10元以上的书本的信息。
4、查询书本“PHP”的价格。
为图方便,我把4题写在一个文件中,所以变量名看着有点乱,不过我稍微注释了一下。

package ch;
import java.util.ArrayList;
import java.io.File;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import org.w3c.dom.*;
public class TryXml {
public static void main(String[] args) throws Exception{
//公用代码
	DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
	DocumentBuilder db=dbf.newDocumentBuilder();
	Document doc=db.parse("src/Book.xml");
//第一题	
	Element newBook=doc.createElement("book");
	newBook.setAttribute("bookid", "4");
	Element bookName=doc.createElement("bookname");
	bookName.setTextContent("JSP");
	newBook.appendChild(bookName);
	Element bookPrice=doc.createElement("bookprice");
	bookPrice.setTextContent("400");
	newBook.appendChild(bookPrice);
	Element root=doc.getDocumentElement();
	root.appendChild(newBook);
//第二题
	NodeList list=doc.getElementsByTagName("bookprice");
	for(int i=0;i<list.getLength();i++) {
		Element bookElement=(Element)list.item(i);
		String price=bookElement.getTextContent();
		double bookprice=Double.parseDouble(price);
		String newprice=String.valueOf(bookprice*=1.2);
		bookElement.setTextContent(newprice);
	}
//第三题
	NodeList list2=doc.getElementsByTagName("book");
	for(int j=0;j<list2.getLength();j++) {
		Element bookElement2=(Element)list2.item(j);
		String price2=bookElement2.getElementsByTagName("bookprice").item(0).getTextContent();
		double bookprice2=Double.parseDouble(price2);
        //Node book=bookElement2.getParentNode();
		if(bookprice2>10) {
        String bookid=bookElement2.getAttribute("bookid");
        Node nameNode=bookElement2.getElementsByTagName("bookname").item(0);
        String name=nameNode.getTextContent();
        System.out.println("bookid"+bookid);
        System.out.println("bookname"+name);
        System.out.println("bookprice"+bookprice2);
        System.out.println("---------");
		}
	}
//第四题
	NodeList list3=doc.getElementsByTagName("bookname");
	for(int k=0;k<list3.getLength();k++) {
		Node bookElement3=(Element)list3.item(k);
		String name2=bookElement3.getTextContent();
		if(name2.equals("PHP")) {
           Node priceNodex=doc.getElementsByTagName("bookprice").item(k);
           String bookpricex=priceNodex.getTextContent();
           System.out.println(bookpricex);
		}
	}
//公用代码
	TransformerFactory tf=TransformerFactory.newInstance();
	Transformer transformer=tf.newTransformer();
	transformer.setOutputProperty("encoding","utf-8");
	DOMSource source=new DOMSource(doc);
	File file=new File("newBook.xml");
	StreamResult result=new StreamResult(file);
	transformer.transform(source,result);
	System.out.println("保存成功");
}
}

项目结构图:
在这里插入图片描述
这里有一个要注意的地方,因为生成后的newbook.xml没有配置在路径中,所以eclipse里面没有显示,要去文件夹里看。

<?xml version="1.0" encoding="UTF-8" standalone="no"?><books>
<book bookid="1">
<bookname>ASP</bookname>
<bookprice>120.0</bookprice>
</book>
<book bookid="2">
<bookname>JAVA</bookname>
<bookprice>240.0</bookprice>
</book>
<book bookid="3">
<bookname>PHP</bookname>
<bookprice>360.0</bookprice>
</book>
<book bookid="4"><bookname>JSP</bookname><bookprice>480.0</bookprice></book></books>

思考题:生成的newbook.xml最后一行格式为什么是这样的?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

returnadsss

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值