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