/**node
* 建立xml文件、解析與生成xml文件app
* @param argsdom
*/測試
public DocumentBuilder getDocumentBuilder(){ui
// 建立一個DocumentBUIDERfACTORY的對象spa
DocumentBuilderFactory def = DocumentBuilderFactory.newInstance();.net
// 建立一個DocumentBrilder對象orm
DocumentBuilder db = null;xml
try {對象
db = def.newDocumentBuilder();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
return db;
}
/**
* 生成xml文件
*/
public void createXML(){
DocumentBuilder db = getDocumentBuilder();
Document document = db.newDocument();
Element bookstore = document.createElement("bookStore");
for(int i = 1;i<=5;i++)
{
/**
* 節點類型 :NodeType named constant nodename的返回值 nodeValue的返回值
* Element 1ELEMENT_NODEelement name null
* Attr 2ATTRIBUTE_NODE屬性名稱屬性值
* Text 3 TEXT_NODE #test節點內容
*/
// 向bookstore 根節點中添加子節點book
Element book = document.createElement("book");
Element name = document.createElement("name");
Element price = document.createElement("price");
Element pubDate = document.createElement("pubDate");
book.setAttribute("id", i + "");
// name.setNodeValue("冰與火之歌");
/**
* Element 節點返回值爲null
*/
// price.setNodeValue("12美圓");
price.setTextContent("12美圓");
name.setTextContent("冰與火之歌");
book.appendChild(pubDate);
book.appendChild(price);
book.appendChild(name);
// 將book節點添加到bookstore根節點中
bookstore.appendChild(book);
}
// 將bookstore節點(已經包含了book)添加到dom樹中
document.appendChild(bookstore);
// 用來去掉xmlstandalone 屬性
document.setXmlStandalone(true);
// 建立TransformerFactory 對象
TransformerFactory tff = TransformerFactory.newInstance();
try {
//建立Transformer對象
Transformer tf = tff.newTransformer();
tf.setOutputProperty(OutputKeys.INDENT, "yes");
//tf.setOutputProperty(OutputKeys.STANDALONE, "false");
tf.transform(new DOMSource(document),new StreamResult(new File("book1.xml")));
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
System.out.println();
}
public void xmlParser(){
try {
DocumentBuilder db = getDocumentBuilder();
// 經過DocumentBuilder對象的parser方法加載books.xml文件到當前項目下
Document document = db.parse("books.xml");
// 獲取全部book節點的集合
NodeList booklist = document.getElementsByTagName("book");
System.out.println("一共有" + booklist.getLength() + "本書");
for (int i = 0; i < booklist.getLength(); i++) {
// 桶過item(i)方法 獲取一個book節點,nodelist的索引值從o開始
System.out.println("下面開始遍歷第" + (i + 1) + "書的內容===========");
Node book = booklist.item(i);
// 獲取book節點的全部屬性的集合
NamedNodeMap attrs = book.getAttributes();
// 便利book的屬性
System.out.println("第" + (i + 1) + "本書共有" + attrs.getLength()
+ "個屬性");
for (int j = 0; j < attrs.getLength(); j++) {
// 經過item方法獲取book的每個屬性
Node attr = attrs.item(j);
// 獲取屬性名
System.out.println("屬性名:" + attr.getNodeName());
System.out.println("屬性值:" + attr.getNodeValue());
}
// 已知屬性值的狀況下能夠用Element 類型進行強制類型轉換和接收
// System.out.println("已知屬性值的前提下遍歷book節點的每個屬性");
// Element bk = (Element)booklist.item(i);
// String attrValue = bk.getAttribute("id");
// System.out.println("已知屬性名的前提下進行遍歷的結果"+attrValue);
// 遍歷book節點的子節點
NodeList childNodes = book.getChildNodes();
// 遍歷childNodes,目的獲取每一個節點的節點名和節點值
System.out.println("第" + (i + 1) + "本書工有"
+ childNodes.getLength() + "個子節點");
for (int k = 0; k < childNodes.getLength(); k++) {
// 遍歷每個子節點
// 獲取了element類型節點的節點名
if (childNodes.item(k).getNodeType() == Node.ELEMENT_NODE) {
System.out.print("第" + (k + 1) + "個節點名:"
+ childNodes.item(k).getNodeName());
// System.out.println(childNodes.item(k).getNodeName());
// System.out.println(childNodes.item(k).getNodeValue());
// 獲取element類型節點的節點值
System.out.println("--節點值是:"
+ childNodes.item(k).getFirstChild()
.getNodeValue());
// System.out.println("--節點值是:"+childNodes.item(k).getFirstChild().getTextContent());
}
}
System.out.println("結束遍歷第" + (i + 1) + "書的內容===========");
}
// booklist.getLength();
}catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**
* 測試
* @param args
*/
public static void main(String[] args) {
DOMTest dtest = new DOMTest();
dtest.createXML();
}