2013-07-26 2 views
3

Я хочу посмотреть, существует ли элемент темы с указанным именем в следующем XML-файле.JAXB Moxy getValueByXpath дает null

Input.xml

<data> 
    <artifacts> 
     <document id="efqw4eads"> 
      <name>composite</name> 
     </document> 
     <theme id="1"> 
      <name>Terrace</name> 
     </theme> 
     <theme id="2"> 
      <name>Garage</name> 
     </theme> 
     <theme id="3"> 
      <name>Reception</name> 
     </theme> 
     <theme id="4"> 
      <name>Grade II</name> 
     </theme> 
    </artifacts> 
</data> 

У меня есть следующий код. return true оператор метода никогда не выполняется. answer всегда содержит нулевое значение.

public boolean themeExists(String name, Data data){ 
    String expression = "artifacts/theme[name='"+name+"']/name/text()"; 
    String answer = jaxbContext.getValueByXPath(data, expression, null, String.class); 
    if(answer == null || answer.equals("")){ 
     return false; 
    } 
    return true; 
} 
+1

Вашего XML был нарушен, закрытие '' пропустило '/'. Я добавил. –

ответ

1

Этот случай использования в настоящее время не поддерживается EclipseLink JAXB (MOXy). Я открыл следующее усиление можно использовать для отслеживания нашего прогресса:

+0

Спасибо. Наверное, сейчас я буду использовать JXPathContext. – waqas

+0

Боже. Начиная с версии 2.6.4, это все еще похоже на то, что не рассматривается? Является ли Moxy мертвым продуктом? – OldProgrammer

1

Там нет <artifacts/> элемента вы ищете в первом шаге оси. Ваше выражение XPath должно быть что-то вроде

String expression = "data/theme[name='"+name+"']/name/text()"; 
+0

Спасибо, что указали это. Я добавил элемент. Он был там в исходном коде, но xpath все еще не работает. – waqas

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