0

ゲームを開発しています。オブジェクトの状態を xml ファイルに保存したいと考えています。私はそれのためのスキーマを持っていません。私が持っているとしましょう、Country には States オブジェクトのリストがあり、Cities オブジェクトのリストがあります。それらの情報を保存する xml スキーマを生成するにはどうすればよいですか?

4

3 に答える 3

2

以下の例を参照してください。

  1. メインクラスパブリッククラスCreateXML{

    public static void main(String[] args) {
        try {
            final JAXBContext context = JAXBContext.newInstance(Country.class);
            final Marshaller marshaller = context.createMarshaller();
            // Create a stringWriter to hold the XML
            final StringWriter stringWriter = new StringWriter();
            CreateXML xml = new CreateXML();
            Country country = xml.createCountry();
            marshaller.marshal(country, stringWriter);
            // Print out the contents of the stringWriter
            System.out.println(stringWriter.toString());
        } catch (JAXBException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    private List<String> createCity(){
        List<String> cities = new ArrayList<String>();
        cities.add("Slough");
        cities.add("Manchestor");
        return cities;
    }
    private List<State> createState(){
        List<State> states = new ArrayList<State>();
        State state = new State();
        state.setStatName("London");
        state.setCityList(createCity());
        states.add(state);
        return states;
    }
    private Country createCountry(){
        Country country = new Country("UK", createState());
        return country;
    }
    

    }

2.JavaBeans-国

@XmlRootElement
public class Country {

    String countryName;
    List<State> states;
    public Country(String countryName, List<State> states) {
        this.countryName = countryName;
        this.states = states;
    }
    public Country() {
    }
    public String getCountryName() {
        return countryName;
    }
    public void setCountryName(String countryName) {
        this.countryName = countryName;
    }
    public List<State> getStates() {
        return states;
    }
    public void setStates(List<State> states) {
        this.states = states;
    }

}

3.Javabeanの状態

String statName;
List<String> cityList;

public State() {
}
public String getStatName() {
    return statName;
}
public void setStatName(String statName) {
    this.statName = statName;
}
public List<String> getCityList() {
    return cityList;
}
public void setCityList(List<String> cityList) {
    this.cityList = cityList;
}
于 2012-10-07T06:28:07.130 に答える
1

XMLEncoder/Decoder を使用すると、スキーマを作成する必要はなく、特定の形式で「Bean」を作成するだけです。EGCity豆。

import java.util.ArrayList;

public class City {

    public String name;

    public City() {
    }

    public City(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public 'no arg's コンストラクターと、シリアライズしたいすべての public 属性の public getter および setter があります。Stateクラスも同じだろう。

import java.util.ArrayList;

public class State {

    public ArrayList<City> cities;
    public String name;

    public State() {
    }

    public State(String name) {
        this.setName(name);
    }

    public ArrayList<City> getCities() {
        return cities;
    }

    public void setCities(ArrayList<City> cities) {
        this.cities = cities;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

次に、ロットをシリアル化するための短いコードのみが必要です。

import java.awt.Desktop;
import java.beans.XMLEncoder;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;

public class SerializeObject {

    public static void main(String[] args) throws Exception {
        ArrayList<State> states = new ArrayList<State>();
        State nsw = new State("New South Wales");
        states.add(nsw);
        ArrayList<City> nswCities = new ArrayList<City>();
        nswCities.add(new City("Sydney"));
        nswCities.add(new City("Wollongong"));
        nsw.setCities(nswCities);

        State qld = new State("Queensland");
        states.add(qld);
        ArrayList<City> qldCities = new ArrayList<City>();
        qldCities.add(new City("Brisbane"));
        qldCities.add(new City("Ipswich"));
        qld.setCities(qldCities);

        File f = new File("localities.xml");
        FileOutputStream fos = new FileOutputStream(f);
        XMLEncoder xmle = new XMLEncoder(fos);
        xmle.writeObject(states);
        xmle.close();

        Desktop.getDesktop().edit(f);
        System.out.println("Finished!");
    }
}

結果のシリアル化されたファイル。

<?xml version="1.0" encoding="UTF-8"?> 
<java version="1.6.0" class="java.beans.XMLDecoder"> 
 <object class="java.util.ArrayList"> 
  <void method="add"> 
   <object class="State"> 
    <void property="cities"> 
     <object class="java.util.ArrayList"> 
      <void method="add"> 
       <object class="City"> 
        <void property="name"> 
         <string>Sydney</string> 
        </void> 
       </object> 
      </void> 
      <void method="add"> 
       <object class="City"> 
        <void property="name"> 
         <string>Wollongong</string> 
        </void> 
       </object> 
      </void> 
     </object> 
    </void> 
    <void property="name"> 
     <string>New South Wales</string> 
    </void> 
   </object> 
  </void> 
  <void method="add"> 
   <object class="State"> 
    <void property="cities"> 
     <object class="java.util.ArrayList"> 
      <void method="add"> 
       <object class="City"> 
        <void property="name"> 
         <string>Brisbane</string> 
        </void> 
       </object> 
      </void> 
      <void method="add"> 
       <object class="City"> 
        <void property="name"> 
         <string>Ipswich</string> 
        </void> 
       </object> 
      </void> 
     </object> 
    </void> 
    <void property="name"> 
     <string>Queensland</string> 
    </void> 
   </object> 
  </void> 
 </object> 
</java> 
于 2012-10-07T07:07:18.700 に答える
0

xstream http://x-stream.github.io/tutorial.htmlで試してください

XStream は、オブジェクトを XML にシリアライズし、再び XML にシリアライズする単純なライブラリです。

于 2012-10-07T05:17:13.937 に答える