package?domtest_01;
import?java.io.File;
import?java.io.IOException;
import?javax.xml.parsers.DocumentBuilder;
import?javax.xml.parsers.DocumentBuilderFactory;
import?javax.xml.parsers.ParserConfigurationException;
import?javax.xml.transform.OutputKeys;
import?javax.xml.transform.Transformer;
import?javax.xml.transform.TransformerConfigurationException;
import?javax.xml.transform.TransformerException;
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.NamedNodeMap;
import?org.w3c.dom.Node;
import?org.w3c.dom.NodeList;
import?org.xml.sax.SAXException;
public?class?DOMTest_01?{
public?DocumentBuilder?getDocumentBuilder(){
//創(chuàng)建documentbuilderfactory對象
DocumentBuilderFactory?dbf?=?DocumentBuilderFactory.newInstance();
//創(chuàng)建documentbuilder對象
DocumentBuilder?db?=null;
try?{
db?=?dbf.newDocumentBuilder();
}?catch?(ParserConfigurationException?e)?{
e.printStackTrace();
}
return?db;
}
public?void?xmlParser(){
try?{
//通過documentbuilder對象的parse方法加載books.xml文件到當(dāng)前項目下
Document?document?=?getDocumentBuilder().parse("book.xml");
NodeList?booklist?=?document.getElementsByTagName("book");
//通過nodelist的getlength獲取booklist的長度
System.out.println("一共有"+booklist.getLength()+"本書");
//遍歷每一個book節(jié)點
for(int?i=0;?i<booklist.getLength();?i++){
//下面開始遍歷i+1本書的內(nèi)容
System.out.println("====下面開始遍歷第"+(i+1)+"本書的內(nèi)容====");
//通過item(i)獲取一個book節(jié)點,nodelist的索引值
Node?book?=?booklist.item(i);
//獲取book節(jié)點的所有屬性集合
NamedNodeMap?attr?=?book.getAttributes();
System.out.println("第"+(i+1)+"本書共有"+attr.getLength()+"個屬性");
//遍歷book的屬性
for(int?j=0;?j<attr.getLength();?j++){
//通過item方法獲取book節(jié)點的某一屬性
Node?att?=?attr.item(j);
//獲取屬性名
System.out.print("屬性名:"+att.getNodeName());
//獲取屬性值
System.out.println("屬性值:"+att.getNodeValue());
}
//解析book節(jié)點的子節(jié)點
NodeList?childNodes?=?book.getChildNodes();
//遍歷childNodes獲取每個節(jié)點的節(jié)點名和節(jié)點值
System.out.println("第"+(i+1)+"本書共有"+childNodes.getLength()+"個子節(jié)點");
for(int?k=0;?k<childNodes.getLength();?k++){
//區(qū)分text類型的node以及element類型的node
if(childNodes.item(k).getNodeType()==Node.ELEMENT_NODE){
//獲取element類型的節(jié)點名
System.out.print(childNodes.item(k).getNodeName()+":??");
System.out.println(childNodes.item(k).getFirstChild().getNodeValue());
}
}
System.out.println("====結(jié)束遍歷第"+(i+1)+"本書的內(nèi)容====");
}
}?catch?(SAXException?e)?{
e.printStackTrace();
}?catch?(IOException?e)?{
e.printStackTrace();
}
}
/*
?*?創(chuàng)建xml
?*?
?*/
public?void?xmlCreate(){
DocumentBuilder?db?=?getDocumentBuilder();
Document?document?=?db.newDocument();
Element?bookstore?=?document.createElement("bookstore");
//向bookstore節(jié)點中添加子節(jié)點book
Element?book?=?document.createElement("book");
book.setAttribute("id",?"1");
bookstore.appendChild(book);
//將bookstore節(jié)點添加到dom樹中
document.appendChild(bookstore);
//創(chuàng)建TransformerFactory對象
TransformerFactory?tff?=?TransformerFactory.newInstance();
try?{
//創(chuàng)建Transformer對象
Transformer?tf?=?tff.newTransformer();
//換行
tf.setOutputProperty(OutputKeys.INDENT,"yes");
tf.transform(new?DOMSource(document),new?StreamResult(new?File("books1.xml")));
}?catch?(TransformerConfigurationException?e)?{
e.printStackTrace();
}?catch?(TransformerException?e)?{
e.printStackTrace();
}
}
public?static?void?main(String[]?args)?{
//創(chuàng)建DOMTest_01對象
DOMTest_01?test?=?new?DOMTest_01();
//調(diào)用解析方法,解析xml文件
// test.xmlParser();
test.xmlCreate();
}
}
2016-08-30
程序運(yùn)行后效果是:控制臺沒有報錯,沒有輸出,在該java項目下JRE System Libraries下沒有創(chuàng)建出代碼中books1.xml文件。