我正在做一些清理我的應用程序中的工作代碼的工作,並且我注意到我正在重用我的代碼中多個位置的XPathFactory
,XPath
,XPathExpression
,XPathExpression
對象,並且認爲我會清理它並設置方法去做這個。我注意到的是,通常當您將XML文檔發送到XPathExpression.evalutate
方法時,您只需將它放在源代碼的參數中即可。爲什麼在傳遞給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的告訴我,我必須轉換document
到InputSource
,並將其標記作爲錯誤。我仔細檢查了XPathExpression.evaluate
中使用的InputSource和我的方法中使用的InputSource是相同的類類型。有沒有人有更深入的瞭解,從這個不一致的地方來?
感謝@AxelH,我顯然是盲目的,並沒有看到有多個方法簽名。我現在覺得有點愚蠢。 – JRSofty
@JRSofty在eclipse中,您可以使用 +左鍵單擊某個方法以打開該類中的聲明。這是有用的快速檢查方法,或者你只是通過懸停在方法檢查javadoc,它會認識到它是'Object'方法,而不是'InputSource';)我不知道其他IDE上的快捷方式 –
AxelH
@JRSofty如果能解決您的問題,請毫不猶豫地將答案標記爲已接受。或者隨時等待其他人;) – AxelH