Я хочу прочитать этот 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() как-то не работает. Спасибо за помощь.
Есть две вещи, которые вы могли бы попробовать: a) добавить '/ text()' к вашему выражению XPath в назначении 'str' и b) добавить действительное объявление XML (например,' Xml version = "1.0 "encoding =" UTF-8 "?>') для вашего входного XML. –
Пробовал и не повезло, спасибо в любом случае. – user2945536
Еще одна идея: в другой реализации ExpressionEngine для обозначения стиля свойства самый верхний тег (который был бы '' в вашем случае) не является частью выражения поиска. Не могли бы вы попробовать параметр 'String str =" [@ name = '"+ key +"'] ";'? –