最近在学习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最后一行格式为什么是这样的?