2015-08-14 95 views
-1

我是java新手,我想提供「aaa」鍵並從下面的xml文件中獲取值「bbb」。Java讀取xml中的鍵值對

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <General> 
    <add key="aaa" value="bbb"/> 
    </General> 
</configuration> 

,這是我的代碼是不工作:

  Properties prop = new Properties(); 
      InputStream is = new FileInputStream("c:\\propFileName.config"); 
      prop.load(is); 
      String result = prop.getProperty("aaa"); 

請幫幫忙!

+0

你有XML結構的控制?您可以使用Properties類來加載XML屬性文件,但必須以不同的方式進行構造。 –

+0

我沒有控制xml的結構,因爲我們正在使用machine.config –

回答

0

您放置的文件是xml文件,您粘貼的代碼是讀取屬性文件。 對於讀取xml文件,您需要使用xml解析器[DOM/SAX]。您需要逐個解析元素並獲取元素的屬性。 屬性文件不過是包含鍵值對的文件。 希望你明白!

+0

我明白你的意思,但我有多個

+0

SAX解析器將發出找到的每個標記。如果您有多個' ..'部分,它們將按照遇到的情況發射。您應該能夠獲取每個密鑰在發射時的價值。 – Sid

+0

有沒有任何示例代碼? –

2

使用此爲那種XML文件:

try { 
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder = factory.newDocumentBuilder(); 
    Document doc = builder.parse("E:\\temp\\dist\\filename.config"); 

    XPathFactory xPathfactory = XPathFactory.newInstance(); 
    XPath xpath = xPathfactory.newXPath(); 
    XPathExpression expr = xpath.compile("//configuration/General/add[@key]"); 
    NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET); 

    for (int c = 0; c < nl.getLength(); c++) { 
     Node currentItem = nl.item(c); 
     String key = currentItem.getAttributes().getNamedItem("key").getNodeValue(); 
     String value = currentItem.getAttributes().getNamedItem("value").getNodeValue(); 
     urlList.put(key, value); 
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
}