2012-08-13 10 views
5

Hier ist der folgende Code aus dem Frühjahr-ws Handbuch exzerpiert:JDOM 2 und XPath

public class HolidayEndpoint { 

    private static final String NAMESPACE_URI = "http://mycompany.com/hr/schemas"; 

    private XPath startDateExpression; 

    private XPath endDateExpression; 

    private XPath nameExpression; 

    private HumanResourceService humanResourceService; 

    @Autowired 
    public HolidayEndpoint(HumanResourceService humanResourceService)      (2) 
     throws JDOMException { 
    this.humanResourceService = humanResourceService; 

    Namespace namespace = Namespace.getNamespace("hr", NAMESPACE_URI); 

    startDateExpression = XPath.newInstance("//hr:StartDate"); 
    startDateExpression.addNamespace(namespace); 

    endDateExpression = XPath.newInstance("//hr:EndDate"); 
    endDateExpression.addNamespace(namespace); 

    nameExpression = XPath.newInstance("concat(//hr:FirstName,' ',//hr:LastName)"); 
    nameExpression.addNamespace(namespace); 
    } 

Mein Problem ist, dass diese mit JDOM 1.0 zu sein scheinen, und ich mag JDOM 2.0 verwenden.

Wie konvertiere ich diesen Code von JDOM 1.0 zu JDOM 2.0? Warum hat der Frühling seinen Beispielcode nicht aktualisiert?

Danke!

+0

Haben Sie Ihre Importe aktualisiert jDom2 zu benutzen? Der Import für Element ist beispielsweise 'import org.jdom2.Element;'. –

Antwort

7

JDOM2 ist noch relativ neu .... aber die XPath-Factory in JDOM 1.x ist besonders kaputt ... und JDOM 2.x hat eine neue API dafür. Die alte API existiert für Abwärtskompatibilität/Migration. Werfen Sie einen Blick auf dieses Dokument hier für einige Überlegungen, und die new API in JDOM 2.x.

In Ihrem Fall möchten Sie wahrscheinlich den Code mit so etwas wie ersetzen:

XPathExpression<Element> startDateExpression = 
    XPathFactory.instance().compile("//hr:StartDate", Filters.element(), null, namespace); 

List<Element> startdates = startDateExpression.evaluate(mydocument); 

Rolf

+0

Sobald ich das getan habe, wie verwende ich den xPathExpression, um den Wert abzurufen? Die Methode valueOf ist weg. – Thom

+0

Der XPathExpression hat die Funktionen evaluate und EvaluateFirst, die jeweils eine Liste aller Knoten zurückgeben, die mit dem Ausdruck übereinstimmen, oder nur den ersten übereinstimmenden Knoten. Im obigen Beispiel ist Startdatum eine Liste mit allen StartDate-Elementen im Dokument. – rolfl

+0

Nochmals vielen Dank für Ihre Hilfe. Jetzt bin ich aber verloren. Ich arbeite über http://static.springsource.org/spring-ws/sites/2.0/reference/html/tutorial.html in Kapitel 3. Ich versuche herauszufinden, wie man den Code dort zu JDOM konvertieren kann 2. – Thom

0

Um den Wert mit dem Code oben von Rolf, iterieren durch die Liste zu analysieren oder erhalten das erste Element von der Liste unter der Annahme, dass es nur eines gibt.

List<Element> startdates = startDateExpression.evaluate(mydocument); 

    for (Element e: startdates){ 
     logger.debug("value= " + e.getValue()); 
    } 

oder

List<Element> startdates = startDateExpression.evaluate(mydocument); 
logger.debug("value " + startdates.get(0).getValue();