亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

解決xml縮進和添加第二本書的問題 (問題已解決)

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?{

	/**
	?*?創建一個DocumentBuilder
	?*?@return
	?*/
	public?DocumentBuilder?getDocumentBuilder()?{
		//?創建一個DocumentBuilderFactory的對象
		DocumentBuilderFactory?dbf?=?DocumentBuilderFactory.newInstance();
		//?創建DocumentBuilder對象
		DocumentBuilder?db?=?null;
		try?{
			db?=?dbf.newDocumentBuilder();
		}?catch?(ParserConfigurationException?e)?{
			e.printStackTrace();
		}
		return?db;
	}

	/**
	?*?解析XMl文件
	?*/
	public?void?xmlParser()?{

		try?{

			//?通過DocumentBuilder對象的parser方法加載book.xml文件到當前項目下
			org.w3c.dom.Document?document?=?getDocumentBuilder().parse("book.xml");
			//?獲取所有book節點的集合
			NodeList?booklist?=?document.getElementsByTagName("book");
			//?通過nodelist的getlength()方法可以獲取booklist的長度
			System.out.println("一共有"?+?booklist.getLength()?+?"本書");
			//?遍歷每一個book節點
			for?(int?i?=?0;?i?<?booklist.getLength();?i++)?{
				System.out.println("==========================下面開始遍歷第"?+?(i?+?1)?+?"這本書的內容==========");
				//?通過item(i)獲取一個book節點,Nodelist的索引值從0開始
				Node?book?=?booklist.item(i);
				//?獲取book節點的所有屬性集合
				NamedNodeMap?attrs?=?book.getAttributes();
				System.out.println("第"?+?(i?+?1)?+?"本書共有"?+?attrs.getLength()?+?"個屬性");
				for?(int?j?=?0;?j?<?attrs.getLength();?j++)?{
					//?通過item(intex)方法獲取book節點的某一個屬性
					Node?attr?=?attrs.item(j);
					//?獲取屬性名
					System.out.print("屬性名:"?+?attr.getNodeName());
					//?獲取屬性值
					System.out.println("--屬性值"?+?attr.getNodeValue());

				}
				//?前提:已經知道book節點有些只有一個id屬性
				//?講book節點強制進行類型轉換,轉換成Element類型
				//?org.w3c.dom.Element?book?=?(org.w3c.dom.Element)
				//?booklist.item(i);
				//?//獲取屬性值
				//?String?attrValue?=?book.getAttribute("id");
				//?System.out.println("id屬性的屬性值為"+?attrValue);
				//?解析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()?+?":");
						//?獲取了element類型節點的節點值
						//?System.out.println(childNodes.item(k).getFirstChild().getNodeValue());
						System.out.println(childNodes.item(k).getTextContent());
					}
				}
				System.out.println("=========================結束遍歷第"?+?(i?+?1)?+?"這本書的內容==========");
			}
		}?catch?(SAXException?e)?{
			e.printStackTrace();
		}?catch?(IOException?e)?{
			e.printStackTrace();
		}
	}

	/**
	?*?生成xml的方法
	?*/

	public?void?createXML()?{
		//?創建DOMTest對象
		DocumentBuilder?db?=?getDocumentBuilder();
		org.w3c.dom.Document?document?=?db.newDocument();
		document.setXmlStandalone(true);
		org.w3c.dom.Element?bookstore?=?document.createElement("bookStore");
		//?向bookstore根節點中添加子節點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("安托萬·德·圣·??颂K佩里");
		year.setTextContent("1942");
		price.setTextContent("22");
		
		book.appendChild(name);
		book.appendChild(author);
		book.appendChild(year);
		book.appendChild(price);
		//設置book的屬性
		book.setAttribute("id",?"1");
		//?將book節點添加到bookstore根節點中
		bookstore.appendChild(book);
		
		//此處嘗試添加第二本書,之前由于變量名重復造成失敗,現在改變量名之后成功添加第二本書
		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節點(已經包含了book)添加到dom樹中
		document.appendChild(bookstore);

		//?創建TransformFactory對象
		TransformerFactory?tff?=?TransformerFactory.newInstance();
		try?{
			Transformer?tf?=?tff.newTransformer();
			//?設置換行
			tf.setOutputProperty(OutputKeys.INDENT,?"yes");
			//設置縮進量
			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)?{
		//?創建DOMTest對象
		DOMTest?test?=?new?DOMTest();
		//?調用解析方法,解析XMl文件
		test.createXML();
	}
}


正在回答

1 回答

問題已解決呢就沒什么看的了

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

解決xml縮進和添加第二本書的問題 (問題已解決)

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號