2012-08-13 11 views
5

Oto następujący kod zaczerpnięty z podręcznika Wiosna-WS:JDOM 2 i 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); 
    } 

Moim problemem jest to, że wydaje się być za pomocą JDOM 1.0 i chciałbym użyć JDOM 2.0.

Jak przekonwertować ten kod z JDOM 1.0 na JDOM 2.0? Dlaczego wiosna nie zaktualizowała swojego przykładowego kodu?

Dzięki!

+0

Czy zaktualizowane importu do korzystania jDom2? Na przykład import dla elementu to 'import org.jdom2.Element;'. –

Odpowiedz

7

JDOM2 jest wciąż stosunkowo nowy ... ale fabryka XPath w JDOM 1.x jest szczególnie uszkodzona ... a JDOM 2.x ma dla niego nowe API. Stary API istnieje dla kompatybilności/migracji wstecznej. Spójrz na ten dokument tutaj z jakiegoś powodu i na new API in JDOM 2.x.

W twoim przypadku, to prawdopodobnie chcą zastąpić kod z czymś takim:

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

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

Rolf

+0

kiedy już to zrobiłem, w jaki sposób mogę użyć xPathExpression do pobrania wartości? metoda valueOf zniknęła. – Thom

+0

XPathExpression ma wartość Evaluate i EvaluateFirst, które zwracają odpowiednio listę wszystkich węzłów odpowiadających wyrażeniu lub tylko pierwszy pasujący węzeł. w powyższym przykładzie startdates jest listą zawierającą wszystkie elementy StartDate w dokumencie. – rolfl

+0

Jeszcze raz dziękuję za pomoc. Teraz jestem zgubiony. Pracuję nad http://static.springsource.org/spring-ws/sites/2.0/reference/html/tutorial.html w rozdziale 3. Próbuję dowiedzieć się, jak przekonwertować kod w celu korzystania z JDOM 2. – Thom

0

W celu analizowania wartość za powyższy kod od Rolf, iterację listy lub dostać pierwszy element z listy przy założeniu, że jest tylko jeden.

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

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

lub

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