2017-05-31 28 views
0

我正在做一些清理我的應用程序中的工作代碼的工作,並且我注意到我正在重用我的代碼中多個位置的XPathFactoryXPathXPathExpressionXPathExpression對象,並且認爲我會清理它並設置方法去做這個。我注意到的是,通常當您將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的告訴我,我必須轉換documentInputSource,並將其標記作爲錯誤。我仔細檢查了XPathExpression.evaluate中使用的InputSource和我的方法中使用的InputSource是相同的類類型。有沒有人有更深入的瞭解,從這個不一致的地方來?

回答

1

實際上,使用Document它使用的是XPathExpression.evaluate(Object, QName)方法。

Document是一個界面,所以它不能鄙視類InputSource。這不可能。這就是爲什麼你需要更新你的方法:

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

或者,如果你真的想這個限制Document

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

感謝@AxelH,我顯然是盲目的,並沒有看到有多個方法簽名。我現在覺得有點愚蠢。 – JRSofty

+0

@JRSofty在eclipse中,您可以使用 +左鍵單擊某個方法以打開該類中的聲明。這是有用的快速檢查方法,或者你只是通過懸停在方法檢查javadoc,它會認識到它是'Object'方法,而不是'InputSource';)我不知道其他IDE上的快捷方式 – AxelH

+0

@JRSofty如果能解決您的問題,請毫不猶豫地將答案標記爲已接受。或者隨時等待其他人;) – AxelH

相關問題