5

以下是摘自 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);
  }

我的问题是这似乎正在使用 JDOM 1.0,我想使用 JDOM 2.0。

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

谢谢!

4

2 回答 2

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);

罗尔夫

于 2012-08-13T19:38:29.217 回答
0

为了使用上面来自 Rolf 的代码解析值,遍历列表或从列表中获取第一个元素,假设只有一个元素。

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();
于 2013-07-11T18:07:38.440 回答