2013-11-01 2 views
0

Я хочу прочитать этот XML-файл:Apache xmlconfig XPath не читает элемент

<configuration> 
<parameter name="path">C:\Users\bellibot\Desktop</parameter> 
<parameter name="filename">config.xml</parameter> 
<module type="livestatus" id="0001"> 
    <parameter name="username">nagiosadmin</parameter> 
    <parameter name="password">nagiosadmin</parameter> 
    <parameter name="hostaddress">127.0.0.1/nagios/live.php?q=</parameter> 
</configuration> 

, используя этот код:

class XMLslave { 
XMLConfiguration config; 
String defval = "DEFAULT"; 


public XMLslave(){} 

public XMLslave(String path, String filename){ 
    try{ 
    String str = path + "\\" + filename; 
    File file = new File(path, filename); 
    this.config = new XMLConfiguration(file); 
    this.config.setExpressionEngine(new XPathExpressionEngine()); 
    }catch(ConfigurationException e){} 
} 

public static void main(String[] args) { 
    try{ 
    BufferedReader in = new BufferedReader(
      new InputStreamReader(System.in)); 
    System.out.println("Insert Path"); 
    String path = in.readLine(); 
    System.out.println("Insert Filename"); 
    String filename = in.readLine(); 
    XMLslave slave = new XMLslave(path, filename); 
    String str = slave.getKey("path"); 
    System.out.println(str);  
    }catch (IOException e){} 
} 

String getKey(String key){ 
    String result; 
    String str = "/configuration/parameter[@name='" + key + "']"; 
    result = this.config.getString(str); 
    if (result==null){ 
     return this.defval; 
    }else{ 
     return result;} 
    } 

Я не понимаю, почему возвращаемое значение «DEFAULT» вместо «C: \ Users \ bellibot \ Desktop», я протестировал синтаксис xpath и это законно, я верю, что config.getString() как-то не работает. Спасибо за помощь.

+0

Есть две вещи, которые вы могли бы попробовать: a) добавить '/ text()' к вашему выражению XPath в назначении 'str' и b) добавить действительное объявление XML (например,' ') для вашего входного XML. –

+0

Пробовал и не повезло, спасибо в любом случае. – user2945536

+0

Еще одна идея: в другой реализации ExpressionEngine для обозначения стиля свойства самый верхний тег (который был бы '' в вашем случае) не является частью выражения поиска. Не могли бы вы попробовать параметр 'String str =" [@ name = '"+ key +"'] ";'? –

ответ

2

В ExpressionEngine реализация для класса XMLConfiguration не требует самого верхнего тега (который будет <configuration> в вашем случае), чтобы быть частью выражения поиска. Замена вашего выражения поиска на String str = "parameter[@name='" + key + "']"; устранит вашу проблему.

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