使用DOM解析器解析XML文件 學習筆記
阿新 • • 發佈:2018-04-16
使用DOM解析器解析XML文件 學習筆記dom解析和dom4j原理一致
Node是所有元素的父接口
常用的API:
dom解析器會將空白字符當作有效元素對待
要讓dom解析器將空白字符忽略,必須滿足二條件
a)對XML文件必須寫一個DTD約束
b)factory.setIgnoringElementContentWhitespace(true);
dom類解析器和sax類解析器
a)dom是一次性加載到內容,形成document對象,人工導航,適合curd
b)sax是分次性加載到內容,sax解析器導航,但程序員需要編寫sax處理器,必須擴展DefaultHandler類,適合r
結果:
車牌:本田
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();取得DOM解析器工廠
- DocumentBuilder domParser = factory.newDocumentBuilder();取得DOM解析器
- domParser.parse(*.xml)加載需要解析的XML文件
- Document.getDocumentElement()取得XML文件的根元素/節點
- Element.getNodeName():取得根元素
- Element.getElementsByTagName("汽車")取得"汽車"元素的集合
- NodeList.item(i)取得第N個元素,從0開始
- Element.getTextContent():取得元素的文本內容
- Element.getAttributes().getNamedItem("出產時間").getTextContent():取得元素中某屬性的值
- document.createElement("汽車");創建新元素
- Element.setTextContent("我的汽車");設置元素的內容
- Element.appendChild(newCarElement);在尾部添加元素
- Element.insertBefore(newCarElement,
- rootElement.getElementsByTagName("汽車").item(1));在指定的元素前添加元素
- TransformerFactory tf = TransformerFactory.newInstance();創建輸出工廠
- Transformer transformer = tf.newTransformer();創建輸出對象
- Source source = new DOMSource(document);創建內存的document對象
- Result result = new StreamResult(new File("src/cn/itcast/xml/dom/car.xml"));指定輸出的目標地點
- transformer.transform(source,result);將document對象輸出到xml文件中
- Element.setTextContent("深圳");更新元素的內容
- Element.removeChild(secondCarElement);在父元素基礎上刪除直接子元素
a)對XML文件必須寫一個DTD約束
b)factory.setIgnoringElementContentWhitespace(true);
a)dom是一次性加載到內容,形成document對象,人工導航,適合curd
b)sax是分次性加載到內容,sax解析器導航,但程序員需要編寫sax處理器,必須擴展DefaultHandler類,適合r
car.xml
<車輛清單>
<汽車>
<車牌 出產時間="2010年">奧迪</車牌>
<產地>北京</產地>
<單價>30</單價>
</汽車>
<汽車>
<車牌 出產時間="2012年">本田</車牌>
<產地>深圳</產地>
<單價>60</單價>
</汽車>
</車輛清單>
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
//使用DOM解析器解析XML文件
public class Demo1 {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder domParser = factory.newDocumentBuilder();
Document document = domParser.parse(new File("src/cn/itcast/xml/dom/car.xml"));
Element rootElement = document.getDocumentElement();
System.out.println("根元素為:"+rootElement.getNodeName());
NodeList nodeList = rootElement.getElementsByTagName("汽車");
System.out.println("共有:" + nodeList.getLength()+"輛汽車");
System.out.println("++++++++++++++++++++++++++");
for(int i=0;i<nodeList.getLength();i++){
Element element = (Element) nodeList.item(i);
String band = element.getElementsByTagName("車牌").item(0).getTextContent();
String place = element.getElementsByTagName("產地").item(0).getTextContent();
String price = element.getElementsByTagName("單價").item(0).getTextContent();
String time = element.getElementsByTagName("車牌").item(0).getAttributes().getNamedItem("出產時間").getTextContent();
System.out.println("車牌:" + band);
System.out.println("產地:" + place);
System.out.println("單價:" + price);
System.out.println("出產時間:" + time);
System.out.println("-------------------------");
}
}
}
結果:
根元素為:車輛清單
共有:2輛汽車
++++++++++++++++++++++++++
車牌:奧迪
產地:北京
單價:30
出產時間:2010年
車牌:本田
產地:深圳
單價:60
出產時間:2012年
使用DOM解析器解析XML文件 學習筆記