2011-07-21 11 views
2

これからどうしようとしているのは、以下のXMLファイルをループして、各「スクリーン」のオブジェクトに内容を保存することです。オブジェクトを構築するためにXMLをループする

次のように私のXMLは次のとおりです。

<?xml version="1.0" encoding="utf-8"?> 
<screens> 
    <screen id="house" backdropimage = "R.drawable.scene"> 
     <region id="one" rleft = "200" rright = "200" rtop = "10" rbottom = "10"/> 
     <region id="two" rleft = "220" rright = "220" rtop = "12" rbottom = "12"/> 
     <paths left = "park" right = "x" top = "x" bottom = "x"/> 
    </screen> 
    <screen id="park" backdropimage = "R.drawable.park"> 
     <region id="1" rleft = "500" rright = "200" rtop = "10" rbottom = "10"/> 
     <paths right = "house" left = "x" top = "x" bottom = "x"/> 
    </screen> 
</screens> 

だから、アイデアは、私は各画面のブロック内の情報とスクリーンの私の配列内のオブジェクトを作成することです。 IDと背景はうまくいきますが、別のセクションに領域エントリの量が異なるため、 'region'パーツを反復する際に問題が発生しています。これは、現在のutを使用しているコードです。何らかの理由で、 'one' 'two'と '1'を通って/ screenで停止したいと思っています。

depth = parser.getDepth(); 
      while(parser.getDepth() == depth) { 

       if(event==XmlPullParser.START_TAG && parser.getName().contentEquals("region")) { 
        Region reg = new Region(parser.getAttributeIntValue(null, "rleft", 0), 
          parser.getAttributeIntValue(null, "rtop", 0), 
          parser.getAttributeIntValue(null, "rright", 0), 
          parser.getAttributeIntValue(null, "rbottom", 0)); 
        //String str = parser.getIdAttribute(); 
        newScreen.area = (reg); 
        //Rect temp = reg.getBounds(); 
        newScreen.areaArray.add(reg); 
      parser.next(); 
      } 

これは、私は、Java /アンドロイドでXMLファイルを使用してみましたのは初めてであり、私はので、私は最善の方法をここで使用していないと確信しているし、全体でJavaにまだかなり新しいですよ助けていただければ幸いです。ありがとう

答えて

3

私はxmlをObjectにシリアル化するためにSimple-xmlを使用します。 彼らはあなたがここにライブラリーを得ることができ、かなり良いドキュメントを持っている:http://simple.sourceforge.net/

はここに例を示します

YourActivity.java

import org.simpleframework.xml.Serializer; 
import org.simpleframework.xml.core.Persister; 

.... 
private Screens myScreens; 

.... 


private void serializeMyXml(){ 
     File source = new File("directory/yourXmlFile.xml"); 
     Serializer serializer = new Persister(); 
     try { 
      myScreens= serializer.read(Screens.class, source); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
} 

Screens.java

import java.io.Serializable; 
import java.util.List; 

import org.simpleframework.xml.ElementList; 
import org.simpleframework.xml.Root; 

@Root 
public class Screensimplements Serializable{ 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1111;//some random unique serialversion id 

    @ElementList(inline=true) 
    private List<Screen> list; 

    public List<Screen> getList() { 
     return list; 
    } 

} 

S creen.java

import java.io.Serializable; 

    import org.simpleframework.xml.Attribute; 

    public class Entity implements Serializable{ 

     /** 
     * 
     */ 
     private static final long serialVersionUID = 5004451486040850151L; 

     @Attribute 
     private String backdropimage; 

     @Attribute 
     private int id; 

     @ElementList 
     private List<Region> region; 

@Element 
private Paths paths; 

     public int getId() { 
      return id; 
     } 

     public String getBackdropimage() { 
      return backdropimage; 
     } 

    } 

などなど...など.. documewntatioでそれについての詳細を読みます。

幸運

+0

非常にこの情報が、それは私のコードは、私はちょうど間違って出力を読んでいたし、私はそれを期待どのように働いていたが判明し感謝しています。 – Be77amy

+1

@tdtje:優れた回答btw。 –

+0

@tdtje私はすべての時間アンドロイドでxmlを解析すると私はこのポストにつまずいてうれしいです。このライブラリは、プルパーサーを使用するほうがはるかに優れているようです。遅すぎると解析しない限り、このメソッドに切り替える予定です。ありがとう。 –

関連する問題