對於大學的項目,我需要解析一個GML文件。 GML文件是基於XML的,因此我使用JDOM2來解析它。爲了適應我的目的,我延長org.jdom2.Document像這樣:擴展一個JDOM文檔
package datenbank;
import java.io.File;
// some more imports
public class GMLDatei extends org.jdom2.Document {
public void saveAsFile() {
// ...
}
public GMLKnoten getRootElement(){
return (GMLKnoten) this.getDocument().getRootElement();
}
public void setRootElement(GMLKnoten root){
this.getDocument().setRootElement(root);
}
}
我也延長org.jdom2.Element並命名爲子GMLKnoten但這並不重要太多了我的問題。
測試時,我嘗試加載一個GML文件。當使用本地文檔和元素類,它加載罰款,但用我的子類的時候,我得到了以下方案:
我使用加載該文件:
SAXBuilder saxBuilder = new SAXBuilder();
File inputFile = new File("gml/Roads_Munich_Route_Lines.gml");
GMLDatei document = null;
ArrayList<String> types = new ArrayList<String>();
try {
document = (GMLDatei) saxBuilder.build(inputFile);
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
在行
document = (GMLDatei) saxBuilder.build(inputFile);
我得到一個演員的異常:
Exception in thread "main" java.lang.ClassCastException: org.jdom2.Document cannot be cast to datenbank.GMLDatei
at datenbank.GMLTest.main(GMLTest.java:27)
我認爲鑄造schould沒有proble因爲我是繼承org.jdom2.document。我錯過了什麼?
增值稅
以及它很容易使用SAXBuilder的。 'SAXBuilder'返回'org.jdom2.Document'而不是'GMLDatei'。如果你真的想達到這個目的,你必須重新實現/擴展'SAXBuilder'來創建'GMLDatei'而不是基本的'Document'! – ParkerHalo
@ParkerHalo是的,我知道,但我記得使用這種方法的年齡,例如,擴展了一個JTable並且工作。 – vatbub
hm ...也許你自己創建了對象(新的關鍵字new)但是這裏的問題是SAXParser創建你的文檔實例! – ParkerHalo