2013-06-14 1 views
0

У меня есть XML-файл, как показано ниже.Как получить все имена элементов с помощью JDOM 2 через XPath в Java 7?

<?xml version="1.0" encoding="UTF-8"?> 
<Site> 
    <Name>MySite</Name> 
    <Groups> 
     <Default></Default> 
     <GroupA></GroupA> 
    </Groups> 
</Site> 

Я хочу, чтобы все имена групп дочерних элементов (в данном примере „По умолчанию“ и „GroupA“) в виде списка строк. Я пытался сделать следующее.

public List<String> getGroupNames() { 
    List<String> names = new ArrayList<String>(); 

    XPathExpression<Text> xpath = XPathFactory.instance().compile(
      "/Site/Groups/*/name()", Filters.text()); 

    List<Text> elements = xpath.evaluate(document); 

    if (elements.size() > 0) { 
     for (Text text : elements) { 
      names.add(text.getText()); 
     } 
     return names; 
    } 
    return null; 
} 

Это нелегко со следующим исключением.

class org.jaxen.saxpath.XPathSyntaxException: /Site/Groups/*/name(): 20: Expected node-type 

Каков правильный синтаксис для этого? Я не понимаю исключения.

ответ

0

Кажется XPathFactory экземпляр используется только поддерживает XPath 1.

Вам нужно загрузить библиотеку поддержки XPath 2, прежде чем он сможет с помощью XPath 2. например: с SAXON:

import net.sf.saxon.om.NamespaceConstant; 


String objectModel = NamespaceConstant.OBJECT_MODEL_SAXON; 
System.setProperty("javax.xml.xpath.XPathFactory:"+objectModel, "net.sf.saxon.xpath.XPathFactoryImpl"); 
Смежные вопросы