2017-06-19 29 views
0
從名稱 - 值對屬性值

下面是本地XML文件 如何從XML獲得的Java

<configuration> 


<property> 

<name>test</name> 

<value>A</value> 

</property> 

</configuration> 

我如何在Java中的值「A」閱讀的內容是什麼? 下面是我在Java測試

Properties properties = new Properties(); 
    FileInputStream fis = new FileInputStream("path to file"); 
    properties.load(fis); 
    String test = properties.getProperty("test"); 
    System.out.println(test); 

與Java代碼中的問題的代碼?我似乎無法將名稱與價值聯繫起來。此外,由於真實文件包含多對名稱值,因此我無法讀取屬性值。

File file = new File("path to file"); 
    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory 
      .newInstance(); 
    DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); 
    Document dom = documentBuilder.parse(file); 
    Element docEle = dom.getDocumentElement(); 
    NodeList nl = docEle.getChildNodes(); 
    ArrayList<String> names = new ArrayList<String>(); 
    ArrayList<String> values = new ArrayList<String>(); 
    if (nl != null) { 
     int length = nl.getLength(); 
     for (int i = 0; i < length; i++) { 
      if (nl.item(i).getNodeType() == Node.ELEMENT_NODE) { 
       Element el = (Element) nl.item(i); 
       if (el.getNodeName().contains("configuration")) { 
        names.add(el.getElementsByTagName("name").item(0).getTextContent()); 
        System.out.println(el.getElementsByTagName("name").item(0).getTextContent()); 
        values.add(el.getElementsByTagName("value").item(0).getTextContent()); 
        System.out.println(el.getElementsByTagName("value").item(0).getTextContent()); 
       } 
      } 
     } 
    } 
+0

https://stackoverflow.com/questions/7704827/java-reading-xml-file – Aquaballin

+0

我讀過,但在例子中,他們有獨特的用戶和傳遞領域。我的示例中的名稱/值字段重複。 –

回答

1

你可以做財產以後這樣的:

File file = new File("path to file"); 
    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory 
     .newInstance(); 
    DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); 
    Document document = documentBuilder.parse(file); 
    document.getDocumentElement().normalize(); 
    Element docEle = document.getDocumentElement(); 
    NodeList nl = docEle.getElementsByTagName("property"); 
    ArrayList names = new ArrayList(); 
    ArrayList values = new ArrayList(); 
    if (nl != null) { 
     int length = nl.getLength(); 
     //System.out.println(length); 
     for (int i = 0; i < length; i++) { 
      if (nl.item(i).getNodeType() == Node.ELEMENT_NODE) { 
       Element el = (Element) nl.item(i); 
       if (el.getNodeName().contains("property")) { 
        names.add(el.getElementsByTagName("name").item(0).getTextContent()); 
        //System.out.println(el.getElementsByTagName("name").item(0).getTextContent()); 
        values.add(el.getElementsByTagName("value").item(0).getTextContent()); 
        //System.out.println(el.getElementsByTagName("value").item(0).getTextContent()); 
       } 
      } 
     } 
    } 

這將所有的值加進的ArrayList,然後你可以訪問它們不過你想要的。或者,您可以像我留下的評論一樣打印它們。

+0

謝謝,我添加了一個文檔對象並解析了文件。打印語句不會返回任何東西。我編輯了最初的問題來展示這一點。 –

+0

我編輯了我的答案並添加了文檔對象。我還添加了一個調試打印語句來檢查文件是否實際加載成功。查看println返回的內容。 – Aquaballin

+0

長度值爲117.作爲參考,正確的導入是org.w3c.dom? 我將ArrayList轉換爲簡單的字符串數組,並在索引位置0上得到OutofBoundsException,表示數組爲空。 –