2012-08-13 67 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();