私のアプリケーションで作業コードをクリーンアップする作業をしていて、私がコード内の複数の場所にあるXPathFactory
、XPath
、XPathExpression
オブジェクトを再利用していたことに気付きました。これをする。私が気づいたのは、通常、XML文書をXPathExpression.evalutate
メソッドに送信するときに、このようなソースのパラメータにXML文書を置くだけだということです。XPathExpression.evalutateメソッドに渡すときにDocumentオブジェクトをキャストする必要がないのはなぜですか?
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は私がInputSource
にdocument
をキャストしなければならないことを私に伝えて、それをマークエラーとして。私はXPathExpression.evaluate
で使用されているInputSourceと私のメソッドで使用されているInputSourceが同じクラスタイプであることを再確認しました。この不一致がどこから来るのか、誰にも深い理解がありますか?
おかげ@AxelHにこれを制限したい場合は、私は明らかに盲目だとあったことがわかりませんでした複数のメソッドシグネチャ。私は今、少しばかげているように感じます。 – JRSofty
@JRSofty eclipseを使用すると、 +メソッドを左クリックしてクラスの宣言を開くことができます。メソッドをすばやくチェックすると便利です。メソッドをホバーすることでjavadocを確認するだけで、 'InputSource'ではなく' Object'メソッドであることがわかります;)他のIDEのショートカットについてはわかりません –
AxelH
@ JRSoftyは、あなたの問題を解決している場合には、答えることを躊躇しないでください。または他の人を待つことを自由に感じてください;) – AxelH