XML文件的一個常用用途是保存數據,例如我們可以將連接數據庫的相關信息保存到一個xml文件中,程序通過讀取xml文件的內容獲取信息。這樣當數據庫的連接信息改變時,我們只需要修改一下xml中對應的內容就可以保證在不修改源程序的情況下繼續執行。
xml文件的讀取有多種方法,本文介紹的是最簡單的方法:利用DOM實現
視頻教程:http://video.sina.com.cn/v/b/38133992-1801138375.html
步驟概括如下:
- 獲取DocumentBuilderFactory
- 通過DocumentBuilder工廠產生一個DocumentBuilder
- 利用DocumentBuilder產生Document
Document可以看成是xml文件在內存中的一個鏡像,這樣,我們可以通過操作Document來實現對xml文件的操作。
下面通過簡單的代碼來實現上面描述的過程:
package wzs; import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.NodeList; public class XMLReader { public static void main(String[] args) { try { File f = new File("MyXml.xml"); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//步驟1 DocumentBuilder builder = factory.newDocumentBuilder();//步驟2 Document doc = builder.parse(f);//步驟3 NodeList nl = doc.getElementsByTagName("action"); for (int i = 0; i < nl.getLength(); i++) { System.out.println("result:"+ doc.getElementsByTagName("result") .item(i).getFirstChild().getNodeValue()); } } catch (Exception e) { e.printStackTrace(); } } }
程序運行結果如下:
result:1_1.jsp
result:1_2.jsp
result:1_3.jsp
result:1_4.jsp
其中步驟3有一個方法parse(File f),用來將給定文件的內容解析為一個XML文檔,並返回一個新的Document對象。
獲取到Document對象后,再獲取節點的值應該不是問題了,API中有對應的方法,這里就不再贅述了。
附上MyXml.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<struts>
<constant name="struts.i18n.encoding" value="gb2312">324</constant>
<package name="stuts2" extends="struts-default">
<action name="login" class="ActionUnit.Person">
<result name="s">1_1.jsp</result>
<result name="t">1_2.jsp</result>
<result name="m">1_3.jsp</result>
<result name="fail">1_4.jsp</result>
</action>
<action name="modifyPassword" class="student.ModifyPassword">
<result name="success">2_1.jsp</result>
<result name="fail">2_2.jsp</result>
</action>
<action name="studentquery" class="student.QueryScore">
<result name="success">3_1.jsp</result>
<result name="false">3_2.jsp</result>
</action>
<action name="infoquery" class="student.QueryInfo">
<result name="success">4_1.jsp</result>
<result name="false">4_2.jsp</result>
</action>
</package>
</struts>