2012-08-13 66 views
5

這裏是從Spring-WS手冊摘錄如下代碼:JDOM 2和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); 
    } 

我的問題是,這似乎使用JDOM 1.0和我想使用JDOM 2.0。

如何將此代碼從JDOM 1.0轉換爲JDOM 2.0?爲什麼不更新他們的示例代碼?

謝謝!

+0

你更新你的進口使用jDom2?例如,元素的導入是'import org.jdom2.Element;'。 – 2013-10-08 15:05:43

回答

7

JDOM2還是比較新的......但是,JDOM 1.x中的XPath工廠特別壞了...而JDOM 2.x有一個新的API。舊的API存在用於向後兼容/遷移。這裏看看這個文件的一些推理,和new API in JDOM 2.x

在你的情況,你可能需要的東西,如更換代碼:

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

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

羅爾夫

+0

一旦我這樣做,我該如何使用xPathExpression檢索值? valueOf方法消失了。 – Thom 2012-08-14 11:54:55

+0

XPathExpression具有evaluate和EvaluateFirst,它們分別返回與該表達式匹配的所有節點的列表,或者只返回第一個匹配節點的列表。在上面的例子中,startdates是一個包含文檔中所有StartDate元素的列表。 – rolfl 2012-08-14 13:16:12

+0

再次感謝您的幫助。不過,現在我迷路了。我正在通過第3章的http://static.springsource.org/spring-ws/sites/2.0/reference/html/tutorial.html工作。我試圖弄清楚如何將代碼轉換爲使用JDOM 2。 – Thom 2012-08-14 13:39:07

0

爲了使用上面的代碼從羅爾夫解析值,遍歷列表或獲得假設只有一個來自List的第一個元素。

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

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

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