這是我在做一個Java應用程序第一次嘗試。最終我將使用JavaFX來合併圖形。有沒有更好的方法?讀取XML構建對象
我的第一步是要導入配置像XML文件中的數據,以構建瓷磚對象的集合。
public Tile (String name, String imageName, int type, int up, int right,
int down, int left,int feature){
this.Name = name;
this.imageName = imageName;
this.type = type;
this.sides.add(up);
this.sides.add(right);
this.sides.add(down);
this.sides.add(left);
this.feature = feature;
}
public static void ReadTileXML(){
try {
Element tileElement;
String tileName = null;
String tileImageName = null;
int tileCount = 0;
int tileType = 0;
int up = 0;
int right = 0;
int down = 0;
int left = 0;
int tileFeature = 0;
ArrayList<Integer> sidesImport = new ArrayList<>();
ArrayList<Tile> tileGallery = new ArrayList<>();
Element channelElement = ((Document) (new SAXBuilder()).build(new File("src/Resources/Tiles.xml"))).getRootElement();
List<Element> tileImport = channelElement.getChildren(channelElement.getName());
for (int i=0; i < tileImport.size(); i++) {
tileElement = (Element) tileImport.get(i);
List<Element> tileAttribs = tileElement.getChildren();
for (Element tileAttrib : tileAttribs) {
switch(tileElement.getName()) {
case "Name":
tileName = tileAttrib.getText();
break;
case "imageName":
tileImageName = tileAttrib.getText();
break;
case "type":
tileType = Integer.parseInt(tileAttrib.getText());
break;
case "Count":
tileCount = Integer.parseInt(tileAttrib.getText());
break;
case "Sides":
sidesImport.clear();
List<Element> tileSides = tileElement.getChildren(tileElement.getName());
for (Element tileSide : tileSides){
sidesImport.add(Integer.parseInt(tileSide.getText()));
}
break;
case "Feature":
tileFeature = Integer.parseInt(tileAttrib.getText());
break;
default:
System.out.println("Malformed TileXML, unknown Element.");
}
Tile tile = new Tile(tileName,tileImageName,tileType,sidesImport.get(0)
,sidesImport.get(1),sidesImport.get(2),sidesImport.get(3)
,tileFeature);
tileGallery.add(tile);
}
}
} catch (JDOMException ex) {
System.out.println(ex);
} catch (IOException ex) {
System.out.println(ex);
}
}
我覺得我使用的過程有點沉重。有沒有更好的方法來從讀取XML創建對象?設置對象的所有變量,然後將其傳遞給構造函數似乎很麻煩。
我應該返回tileGallery的ArrayList到將要調用ReadTileXML方法,該方法的類似的功能? – JamesA