這是引入必要的類,因為在這里使用的是Sun所提供的XML解析器,因而需要引入java.xml.parsers包,其中包含了有DOM解析器和SAX解析器的具體實現(xiàn)。org.w3c.dom包中定義了w3c所制定的DOM接口。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document doc=builder.parse("links.xml");
doc.normalize();
除了上面講到的,還有一個小技巧,對Document對象調(diào)用normalize(),可以去掉XML文檔中作為格式化內(nèi)容的空白而映射在DOM樹中的不必要的Text Node對象。否則你得到的DOM樹可能并不如你所想象的那樣。特別是在輸出的時候,這個normalize()更為有用。
NodeList links =doc.getElementsByTagName("link");
剛才說過,XML文檔中的空白符也會被作為對象映射在DOM樹中。因而,直接調(diào)用Node方法的getChildNodes方法有時候會有些問題,有時不能夠返回所期望的NodeList對象。解決的辦法是使用Element的getElementByTagName(String),返回的NodeLise就是所期待的對象了。然后,可以用item()方法提取想要的元素。
for (int i=0;i Element link=(Element) links.item(i); System.out.print("Content: "); System.out.println(link.getElementsByTagName("text").item(0).getFirstChild().getNodeValue()); System.out.print("URL: "); System.out.println(link.getElementsByTagName("url").item(0).getFirstChild().getNodeValue()); System.out.print("Author: "); System.out.println(link.getElementsByTagName("author").item(0).getFirstChild().getNodeValue()); System.out.print("Date: "); Element linkdate=(Element) link.getElementsByTagName("date").item(0); String day=linkdate.getElementsByTagName("day").item(0).getFirstChild().getNodeValue(); String month=linkdate.getElementsByTagName("month").item(0).getFirstChild().getNodeValue(); String year=linkdate.getElementsByTagName("year").item(0).getFirstChild().getNodeValue(); System.out.println(day+"-"+month+"-"+year); System.out.print("Description: "); System.out.println(link.getElementsByTagName("description").item(0).getFirstChild().getNodeValue()); System.out.println(); } 上面的代碼片斷就完成了對XML文檔內(nèi)容的格式化輸出。只要注意到一些細節(jié)的問題,比如getFirstChile()方法和getElementsByTagName()方法的使用,這些還是比較容易的。 下面的內(nèi)容,就是在修改了DOM樹后重新寫入到XML文檔中去的問題了。這個程序名為xmlwrite.java。在JAXP1.0版本中,并沒有直接的類和方法能夠處理XML文檔的寫入問題,需要借助其它包中的一些輔助類。而在JAXP1.1版本中,引入了對XSLT的支持,所謂XSLT,就是對XML文檔進行變換(Translation)后,得到一個新的文檔結(jié)構(gòu)。利用這個新加入的功能,我們就能夠很方便的把新生成或者修改后的DOM樹從新寫回到XML文件中去了,下面我們來看看代碼的實現(xiàn),這段代碼的主要功能是向links.xml文件中加入一個新的link節(jié)點: import javax.xml.parsers.*; import javax.xml.transform.*; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.*; 新引入的java.xml.transform包中的幾個類,就是用來處理XSLT變換的。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |