這是引入必要的類,因?yàn)樵谶@里使用的是Sun所提供的XML解析器,因而需要引入java.xml.parsers包,其中包含了有DOM解析器和SAX解析器的具體實(shí)現(xiàn)。org.w3c.dom包中定義了w3c所制定的DOM接口。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document doc=builder.parse("links.xml");
doc.normalize();
除了上面講到的,還有一個(gè)小技巧,對(duì)Document對(duì)象調(diào)用normalize(),可以去掉XML文檔中作為格式化內(nèi)容的空白而映射在DOM樹(shù)中的不必要的Text Node對(duì)象。否則你得到的DOM樹(shù)可能并不如你所想象的那樣。特別是在輸出的時(shí)候,這個(gè)normalize()更為有用。
NodeList links =doc.getElementsByTagName("link");
剛才說(shuō)過(guò),XML文檔中的空白符也會(huì)被作為對(duì)象映射在DOM樹(shù)中。因而,直接調(diào)用Node方法的getChildNodes方法有時(shí)候會(huì)有些問(wèn)題,有時(shí)不能夠返回所期望的NodeList對(duì)象。解決的辦法是使用Element的getElementByTagName(String),返回的NodeLise就是所期待的對(duì)象了。然后,可以用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(); } 上面的代碼片斷就完成了對(duì)XML文檔內(nèi)容的格式化輸出。只要注意到一些細(xì)節(jié)的問(wèn)題,比如getFirstChile()方法和getElementsByTagName()方法的使用,這些還是比較容易的。 下面的內(nèi)容,就是在修改了DOM樹(shù)后重新寫入到XML文檔中去的問(wèn)題了。這個(gè)程序名為xmlwrite.java。在JAXP1.0版本中,并沒(méi)有直接的類和方法能夠處理XML文檔的寫入問(wèn)題,需要借助其它包中的一些輔助類。而在JAXP1.1版本中,引入了對(duì)XSLT的支持,所謂XSLT,就是對(duì)XML文檔進(jìn)行變換(Translation)后,得到一個(gè)新的文檔結(jié)構(gòu)。利用這個(gè)新加入的功能,我們就能夠很方便的把新生成或者修改后的DOM樹(shù)從新寫回到XML文件中去了,下面我們來(lái)看看代碼的實(shí)現(xiàn),這段代碼的主要功能是向links.xml文件中加入一個(gè)新的link節(jié)點(diǎn): 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包中的幾個(gè)類,就是用來(lái)處理XSLT變換的。
計(jì)算機(jī)等級(jí)考試二級(jí)Java經(jīng)典算法大全匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |