gpt4 book ai didi

java - 为什么在传递给 XPathExpression.evaluate 方法时不需要转换 Document 对象?

转载 作者:行者123 更新时间:2023-12-02 13:01:36 27 4
gpt4 key购买 nike

我正在清理我的应用程序中的工作代码,我注意到我正在重用 XPathFactoryXPathXPathExpression 对象在我的代码中的多个位置,并认为我会清理它并设置一个方法来执行此操作。我注意到,通常当您将 XML 文档发送到 XPathExpression.evalutate 方法时,您只需将其放置在源的参数中,如下所示。

DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
Document builder = builderFactory.newDocumentBuilder();
Document document = builder.parse(new FileReader("/path/to/file.xml"));

XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expression = xpath.compile("path/to/node");
Object result = expression.evaluate(document, XPathConstants.NODE);

这很好,它可以工作,但是当我尝试将 XPath 部分包装到一个单独的方法中时,如下所示:

private Object getObjectByExpression(String expr, InputSource source, QName objectType)
{
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expression = xpath.compile(expr);
Object result = expression.evaluate(document, objectType);
return result;
}

public void someCalledMethod()
{
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
Document builder = builderFactory.newDocumentBuilder();
Document document = builder.parse(new FileReader("/path/to/file.xml"));

Object result = getObjectByExpression("/path/to/node", document, XPathConstants.NODE);
}

Eclipse 告诉我必须将 document 转换为 InputSource 并将其标记为错误。我仔细检查了 XPathExpression.evaluate 中使用的 InputSource 和我的方法中使用的类类型是否相同。有谁对这种不一致的根源有更深入的了解吗?

最佳答案

实际上,对于 Document 它正在使用 XPathExpression.evaluate(Object, QName)方法。

Document是一个接口(interface),所以它不能继承类InputSource 。这不可能。这就是您需要更新方法的原因:

private Object getObjectByExpression(String expr, Object source, QName objectType)

或者,如果您确实想将其限制为文档

private Object getObjectByExpression(String expr, Document source, QName objectType)

关于java - 为什么在传递给 XPathExpression.evaluate 方法时不需要转换 Document 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44281836/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com