2015-01-06 101 views
0

我一直在試圖弄清楚如何解析出一個XML文件,然而每篇文章看起來都很混亂。Java簡單的解析XML的方法

她是我的樣子。

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
    <root-config> 
     <session timeout="100" warning="30"/> 
    </root-config> 

在我的XML文件中,我只是檢查是否存在以下節點名稱 - 會話。如果會話存在,我想要獲取屬性超時和警告。

有沒有一種簡單的方法在java中做到這一點,而無需創建大量的代碼?

+3

你看之類的東西JDOM? –

回答

1

看一看在Document Object Model(DOM)API,具體如何加載XML樹和read data from it

這是一個如何檢索來自示例XML文檔中的信息的例子:

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; 

... 

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); 
Document document = documentBuilder.parse(new File("input.xml")); 

NodeList sessionNodelist = document.getElementsByTagName("session"); 
if(sessionNodelist.getLength() > 0) { 
    Element sessionElement = (Element) sessionNodelist.item(0); 
    String timeout = sessionElement.getAttribute("timeout"); 
    String warning = sessionElement.getAttribute("warning"); 
    ... 
} 

前三行創建解析輸入文件和XML樹工廠對象的實例是裝在記憶中。

剩餘的代碼通過獲取session節點的列表遍歷文檔的樹。如果存在,則從session元素檢索屬性timeoutwarning。請注意,由於我們知道XML節點的類型是一個元素(Node是表示幾種類型的XML節點(如元素和屬性)的接口),因此對sessionElement進行了明確轉換。

+0

我正在測試這一個,但是,我爲Element對象導入了什麼。 Eclips不喜歡它。 – user1158745

+0

@ user1158745用進口更新。 – manouti

0

如果會話存在,我會給你的屬性超時和警告。

File fXmlFile = new File("D:/yourxmlfilename.xml"); 
     DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
     Document doc = dBuilder.parse(fXmlFile); 

     doc.getDocumentElement().normalize(); 

     System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); 

     NodeList nList = doc.getElementsByTagName("root-config"); 

     System.out.println("----------------------------"); 

     for (int temp = 0; temp < nList.getLength(); temp++) { 
      Node nNode = nList.item(temp); 
      System.out.println("\nCurrent Element :" + nNode.getNodeName()); 

      if(nNode.getNodeName().equals("session")){ 
       // It will displays that session is present 

       Element eElement = (Element) nNode; 

       System.out.println("Item No : " + eElement.getElementsByTagName("timeout").item(0).getTextContent()); 
       System.out.println("Description : " + eElement.getElementsByTagName("warning").item(0).getTextContent()); 

      } 
     } 
0

使用JDOM library代碼很簡單:

SAXBuilder builder = new SAXBuilder(); 
Document document = (Document) builder.build(new File("c:\\file.xml")); 
Element rootNode = document.getRootElement(); 
Element eSession = rootNode.getChild("session"); 

// Use eSession 
eSession.getAttributeValue("timeout");