JDOM 2和xpath

Tho*_*hom 5 java spring-ws jdom jdom-2

以下是从Spring-ws手册中摘录的代码:

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);
  }
Run Code Online (Sandbox Code Playgroud)

我的问题是,这似乎是使用JDOM 1.0,我想使用JDOM 2.0.

如何将此代码从JDOM 1.0转换为JDOM 2.0?为什么Spring没有更新他们的示例代码?

谢谢!

rol*_*lfl 7

JDOM2仍然相对较新....但是,JDOM 1.x中的XPath工厂特别糟糕...... JDOM 2.x有一个新的api.旧API用于向后兼容/迁移.在这里看一下这个文档的原因,以及JDOM 2.x中新API.

在您的情况下,您可能希望用以下代码替换代码:

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

List<Element> startdates = startDateExpression.evaluate(mydocument);
Run Code Online (Sandbox Code Playgroud)

罗尔夫