2013-08-30 3 views
1

Моя цель Java 1.5 У меня есть пользовательский файл конфигурации, предоставляемое из другого поставщика программного обеспечения, мне нужно прочитать егоСинтаксический пользовательских XML-файл конфигурации

<?xml version="1.0" encoding="ISO-8859-1"?> 
<environments> 
    <environment key="DEFAULT" description="Default"> 
     <variable name="LOGGER_NAME" value="LCI"/> 
     <variable name="MAIL_SERVER" value="127.0.0.1"/> 
      ...... 
    </environment> 
    <environment key="TEST" description="Test"> 
     <variable name="LOGGER_NAME" value="LCO"/> 
     <variable name="MAIL_SERVER" value="192.168.2.15"/> 
      ...... 
    </environment> 
</environments> 

мне нужно положить его в хэш-карте и доступом к ней в виде.

MyPropertyManager.getProperty ("DEFAULT", "LOGGER_NAME")

Я думаю, что я могу загрузить Infos в HashMap, где я могу Acces ключ usingg как DEFAULT.LOGGER_NAME

Могу ли я использовать APACHE Configuration COMMONS (КАК?) Или слишком сложно, и лучше использовать Xpath?

ответ

1

Лучшим решением для коротких конфигурационных файлов является построение хэш-карты.

XPathFactory xPathfactory = XPathFactory.newInstance(); 
      XPath xpath = xPathfactory.newXPath(); 
      XPathExpression expr1 = xpath.compile("/environments/environment"); 
      XPathExpression expr2 = xpath.compile("@key"); 
      XPathExpression expr12 = xpath.compile("variable"); 
      XPathExpression expr121 = xpath.compile("@name"); 
      XPathExpression expr122 = xpath.compile("@value"); 

      NodeList environmentNL = (NodeList) expr1.evaluate(doc, XPathConstants.NODESET); 
      for (int i = 0; i < environmentNL.getLength(); i++) { 
       Node environmentI = environmentNL.item(i); 
       String envKey = (String) expr2.evaluate(environmentI, XPathConstants.STRING); 


       NodeList variableNL = (NodeList) expr12.evaluate(environmentI, XPathConstants.NODESET); 
       for (int j = 0; j < variableNL.getLength(); j++) { 
        Node variableI = variableNL.item(j); 
        String valueName = (String) expr121.evaluate(variableI, XPathConstants.STRING); 
        String valueValue = (String) expr122.evaluate(variableI, XPathConstants.STRING); 

        val.put(envKey+"."+valueName, valueValue); 

       } 
      } 

И добавить два метода В этом случае я использую переменную пространства имен вместо среды

1) В этом случае

public static String getProperties(String namespace, String value) throws ConfigLoaderException { 
     String param=namespace+"."+value; 

     if(!val.containsKey(param)){ 
      throw new ConfigLoaderException(param+" ERROR"); 
     }else{ 
      return val.get(param); 

     } 
    } 

...

public static String getProperties(String value) throws ConfigLoaderException { 
     String namespace="DEFAULT"; 
     return getProperties(namespace,value); 
    } 
Смежные вопросы