1)CDATA部分用<![CDATA[和]]>來限定其界限,它們是字元數據的一種特殊形式,可用使用它們來囊括那些含有<、>,&之類字元的字元串,而不必將它們解釋為標記例如:<![CDATA[<]]>,另外需要註意的是CDATA部分不能包含字元串]]>。 2)處理指令(processing instr ...
1)CDATA部分用<![CDATA[和]]>來限定其界限,它們是字元數據的一種特殊形式,可用使用它們來囊括那些含有<、>,&之類字元的字元串,而不必將它們解釋為標記例如:<![CDATA[<]]>,另外需要註意的是CDATA部分不能包含字元串]]>。
2)處理指令(processing instruction)專門處理XML文檔的應用程式中使用的指令,它們用<?和?>來限定其界限。例如:<?xml version="1.0"?>。
3)註釋 使用<!--和-->限定其界限。
4)解析XML文檔有兩種類型的解析器一種是樹形解析器(DOM),另外一種流機制解析器(SAX),首先介紹樹形解析器。
包名:org.w3c.dom
DOM解析器的介面已經被W3C標準化,org.w3c.dom包包含瞭解析時用各種對象以及方法。解析xml文檔首先要創建Document對象,如何創建請看例子:
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder=factory.newDocumentBuilder(); Document doc=builder.parse(f);
parse方法中的參數可以是文件或者是流,可以通過調用getDocumentElement方法獲取xml文檔的根元素,調用getTagName()獲取元素的名字,getChildNodes()獲取節點列表NodeList,調用getTextContent()獲取元素的文本值。
例子:
//根元素 Element root=doc.getDocumentElement(); // 返回節點的集合 NodeList nodeList=root.getChildNodes(); // 返回集合中子節點數 int count=nodeList.getLength(); //獲取元素的名字 String rootName=root.getTagName(); //獲取元素的文本值包括其子元素 String rootText=root.getTextContent();
可用instanceof判斷節點是否是元素,由於Text類型的節點是終結節點,可以用getData獲取Text節點中的字元串,對getData返回的值最好調用trim方法,過濾掉空字元。
for (int i = 0; i < nodeList.getLength(); i++) { //獲取單個節點 Node childNode = nodeList.item(i); //判斷是否是元素, if (childNode instanceof Element) { Element element = (Element) childNode; //childNode只有一個子節點且子節點是Text類型的 例子:<name>zhangsan<name> //Text節點是指的"zhangsan"節點 Text textNode = (Text) element.getFirstChild(); //調用getData獲取其文本值 String textString = textNode.getData().trim(); } else{ // TODO 其他處理 }
5)XPath定位信息
包名:javax.xml.xpath.XPath
獲取XML文檔中某一節點的值,如果遍歷整個DOM樹的節點來查找比較麻煩的,但是使用XPath語言可以輕鬆的得到指定的節點值或屬性值。
XPath可以描述XML文檔中一個節點的集,例如,XPath:/gridbag/row,描述了根元素gridbag的子元素中所有的row元素,可以用[]操作符來選擇特定的元素:/gridbag/row[1]這表示的是第一行(索引號從1開始),使用@操作符可以獲得屬性值,例如:/gridbag/row[1]/@anchor,獲取第一行row元素屬性anchor的值。
XPath表達式是如何創建和使用的,接下來看一段代碼就會明白了:
XPathFactory xPathFactory=XPathFactory.newInstance(); XPath xPath=xPathFactory.newXPath(); //evaluate 返回的是字元串,所以很適合用來獲取文本值 String value= xPath.evaluate("/gridbag/row[1]", doc);
evaluate第一個參數XPath表達式,第二參數是DOM對象。
6)流機制解析器
包名:javax.xml.stream
StAX解析器是一種“拉解析器(pull parser)”,使用下麵的基本迴圈來迭代所有的事件即可:
InputStream in=new FileInputStream("G:\\test.xml"); XMLInputFactory factory=XMLInputFactory.newInstance(); XMLStreamReader parser=factory.createXMLStreamReader(in); while (parser.hasNext()) { // event 對應事件的值 int event=parser.next(); // 元素 處理 if (event==XMLStreamConstants.START_ELEMENT) {
String elementNameString=parser.getLocalName();// 元素名稱
String elementValueString=parser.getText();// 元素值
// TODO
} // Call parser methods obtain event details }
7)生成XML文檔
//TODO...