package?imooc.dmtest;
import?java.io.File;
import?java.io.IOException;
import?javax.lang.model.element.Element;
import?javax.swing.text.Document;
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.NamedNodeMap;
import?org.w3c.dom.Node;
import?org.w3c.dom.NodeList;
import?org.xml.sax.SAXException;
public?class?DOMTest?{
/**
?*?創(chuàng)建一個(gè)DocumentBuilder
?*?@return
?*/
public?DocumentBuilder?getDocumentBuilder()?{
//?創(chuàng)建一個(gè)DocumentBuilderFactory的對(duì)象
DocumentBuilderFactory?dbf?=?DocumentBuilderFactory.newInstance();
//?創(chuàng)建DocumentBuilder對(duì)象
DocumentBuilder?db?=?null;
try?{
db?=?dbf.newDocumentBuilder();
}?catch?(ParserConfigurationException?e)?{
e.printStackTrace();
}
return?db;
}
/**
?*?解析XMl文件
?*/
public?void?xmlParser()?{
try?{
//?通過(guò)DocumentBuilder對(duì)象的parser方法加載book.xml文件到當(dāng)前項(xiàng)目下
org.w3c.dom.Document?document?=?getDocumentBuilder().parse("book.xml");
//?獲取所有book節(jié)點(diǎn)的集合
NodeList?booklist?=?document.getElementsByTagName("book");
//?通過(guò)nodelist的getlength()方法可以獲取booklist的長(zhǎng)度
System.out.println("一共有"?+?booklist.getLength()?+?"本書(shū)");
//?遍歷每一個(gè)book節(jié)點(diǎn)
for?(int?i?=?0;?i?<?booklist.getLength();?i++)?{
System.out.println("==========================下面開(kāi)始遍歷第"?+?(i?+?1)?+?"這本書(shū)的內(nèi)容==========");
//?通過(guò)item(i)獲取一個(gè)book節(jié)點(diǎn),Nodelist的索引值從0開(kāi)始
Node?book?=?booklist.item(i);
//?獲取book節(jié)點(diǎn)的所有屬性集合
NamedNodeMap?attrs?=?book.getAttributes();
System.out.println("第"?+?(i?+?1)?+?"本書(shū)共有"?+?attrs.getLength()?+?"個(gè)屬性");
for?(int?j?=?0;?j?<?attrs.getLength();?j++)?{
//?通過(guò)item(intex)方法獲取book節(jié)點(diǎn)的某一個(gè)屬性
Node?attr?=?attrs.item(j);
//?獲取屬性名
System.out.print("屬性名:"?+?attr.getNodeName());
//?獲取屬性值
System.out.println("--屬性值"?+?attr.getNodeValue());
}
//?前提:已經(jīng)知道book節(jié)點(diǎn)有些只有一個(gè)id屬性
//?講book節(jié)點(diǎn)強(qiáng)制進(jìn)行類(lèi)型轉(zhuǎn)換,轉(zhuǎn)換成Element類(lèi)型
//?org.w3c.dom.Element?book?=?(org.w3c.dom.Element)
//?booklist.item(i);
//?//獲取屬性值
//?String?attrValue?=?book.getAttribute("id");
//?System.out.println("id屬性的屬性值為"+?attrValue);
//?解析book節(jié)點(diǎn)的子節(jié)點(diǎn)
NodeList?childNodes?=?book.getChildNodes();
//?遍歷childNodes獲取每個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)名和節(jié)點(diǎn)值
System.out.println("第"?+?(i?+?1)?+?"本書(shū)共有"?+?childNodes.getLength()?+?"個(gè)子節(jié)點(diǎn)");
for?(int?k?=?0;?k?<?childNodes.getLength();?k++)?{
//?區(qū)分出text類(lèi)型的node以及Element類(lèi)型的node
if?(childNodes.item(k).getNodeType()?==?Node.ELEMENT_NODE)?{
//?獲取了element類(lèi)型節(jié)點(diǎn)的節(jié)點(diǎn)名
System.out.print(childNodes.item(k).getNodeName()?+?":");
//?獲取了element類(lèi)型節(jié)點(diǎn)的節(jié)點(diǎn)值
//?System.out.println(childNodes.item(k).getFirstChild().getNodeValue());
System.out.println(childNodes.item(k).getTextContent());
}
}
System.out.println("=========================結(jié)束遍歷第"?+?(i?+?1)?+?"這本書(shū)的內(nèi)容==========");
}
}?catch?(SAXException?e)?{
e.printStackTrace();
}?catch?(IOException?e)?{
e.printStackTrace();
}
}
/**
?*?生成xml的方法
?*/
public?void?createXML()?{
//?創(chuàng)建DOMTest對(duì)象
DocumentBuilder?db?=?getDocumentBuilder();
org.w3c.dom.Document?document?=?db.newDocument();
document.setXmlStandalone(true);
org.w3c.dom.Element?bookstore?=?document.createElement("bookStore");
//?向bookstore根節(jié)點(diǎn)中添加子節(jié)點(diǎn)book
org.w3c.dom.Element?book?=?document.createElement("book");
org.w3c.dom.Element?name?=?document.createElement("name");
org.w3c.dom.Element?author?=?document.createElement("author");
org.w3c.dom.Element?year?=?document.createElement("year");
org.w3c.dom.Element?price?=?document.createElement("price");
org.w3c.dom.Element?language?=?document.createElement("language");
// name.setNodeValue("xiaomingzi");行不通
name.setTextContent("小王子");
author.setTextContent("安托萬(wàn)·德·圣·??颂K佩里");
year.setTextContent("1942");
price.setTextContent("22");
book.appendChild(name);
book.appendChild(author);
book.appendChild(year);
book.appendChild(price);
//設(shè)置book的屬性
book.setAttribute("id",?"1");
//?將book節(jié)點(diǎn)添加到bookstore根節(jié)點(diǎn)中
bookstore.appendChild(book);
//此處嘗試添加第二本書(shū),之前由于變量名重復(fù)造成失敗,現(xiàn)在改變量名之后成功添加第二本書(shū)
org.w3c.dom.Element?book1?=?document.createElement("book");
org.w3c.dom.Element?name1?=?document.createElement("name");
org.w3c.dom.Element?author1?=?document.createElement("author");
org.w3c.dom.Element?year1?=?document.createElement("year");
org.w3c.dom.Element?price1?=?document.createElement("price");
name1.setTextContent("冰與火之歌");
author1.setTextContent("喬治馬丁");
year1.setTextContent("2014");
price1.setTextContent("89");
book1.appendChild(name1);
book1.appendChild(author1);
book1.appendChild(year1);
book1.appendChild(price1);
book1.setAttribute("id",?"2");
bookstore.appendChild(book1);
//?將bookstores節(jié)點(diǎn)(已經(jīng)包含了book)添加到dom樹(shù)中
document.appendChild(bookstore);
//?創(chuàng)建TransformFactory對(duì)象
TransformerFactory?tff?=?TransformerFactory.newInstance();
try?{
Transformer?tf?=?tff.newTransformer();
//?設(shè)置換行
tf.setOutputProperty(OutputKeys.INDENT,?"yes");
//設(shè)置縮進(jìn)量
tf.setOutputProperty("{http://xml.apache.org/xslt}indent-amount",?"4");
tf.transform(new?DOMSource(document),?new?StreamResult(new?File("books1.xml")));
}?catch?(TransformerConfigurationException?e)?{
e.printStackTrace();
}?catch?(TransformerException?e)?{
e.printStackTrace();
}
}
/**
?*?主方法,程序的入口
?*?
?*?@param?args
?*/
public?static?void?main(String[]?args)?{
//?創(chuàng)建DOMTest對(duì)象
DOMTest?test?=?new?DOMTest();
//?調(diào)用解析方法,解析XMl文件
test.createXML();
}
}
2016-07-22
問(wèn)題已解決呢就沒(méi)什么看的了