2015-01-15 2 views
2

Это мой проект Java strucutreКак загрузить файл xml с помощью конфигурации apache commons (java)?

src/main/java 
    |_LoadXml.java 
src/main/resources/ 
    |_config.xml 
src/test/java 
src/test/resources 

Я хочу, чтобы загрузить следующий файл XML с помощью Apache-общая библиотека конфигурации.

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> 
<properties> 
<comment>Here are some favorites</comment> 
<entry key="favoriteSeason">summer</entry> 
<entry key="favoriteFruit">pomegranate</entry> 
<entry key="favoriteDay">today</entry> 
</properties> 

Я написал следующий фрагмент кода для LoadXml.java

public static void configure() { 
    try { 
     XMLConfiguration config = new XMLConfiguration("config.xml"); 
     node = config.getRootElementName(); 
    } catch (ConfigurationException e) { 
     e.printStackTrace(); 
    } 
    return; 
} 

Я хочу, чтобы загрузить ключи XML и значения в карте с узлами иерархии разделенным на «» (точка). Было бы очень полезно, если бы кто-то помог мне в этом отношении.

+0

Вы можете показать пример вывода, который вы хотите? потому что у вас уже есть карта, вы можете получить значение с помощью 'config.getString (" favoriteSeason ")'. – bachr

ответ

1

клавиши Load XML и значения в Map:

public static Map<String, String> parseConfig() throws ConfigurationException { 

     XMLConfiguration config = new XMLConfiguration("config.xml"); 
     NodeList list = config.getDocument().getElementsByTagName("entry"); 

     Map<String, String> map = new HashMap<String, String>(); 
     for (int i = 0; i < list.getLength(); i++) { 
      Node node = list.item(i); 
      String key = node.getAttributes().getNamedItem("key").getTextContent(); 
      String val = node.getTextContent(); 
      map.put(key, val); 
     } 
     System.out.println(map); 
     return map; 
    } 

ВЫХОДА:
{favoriteSeason=summer, favoriteFruit=pomegranate, favoriteDay=today}

1

Просто используйте config.getRootNode() и затем node.getChildren("entry")

XMLConfiguration config = new XMLConfiguration("_config.xml"); 
Map<String, String> configMap = new HashMap<String, String>(); 
ConfigurationNode node = config.getRootNode(); 
for (ConfigurationNode c : node.getChildren("entry")) 
{ 
    String key = (String)c.getAttribute(0).getValue(); 
    String value = (String)c.getValue(); 
    configMap.put(key, value); 
} 

Тогда вы можете просто сделать :

System.out.println(configMap.get("favoriteSeason")); // prints: summer 
+0

XMLConfiguration не имеет конструктора, который принимает аргумент String. –

+0

@ luis.espinal больше нет, но он [сделал в v1.10] (https://commons.apache.org/proper/commons-configuration/javadocs/v1.10/apidocs/org/apache/commons/configuration /XMLConfiguration.html#XMLConfiguration(java.lang.String)), который предположительно является версией, которую использовал OP, когда он задал вопрос. –

Смежные вопросы