2011-05-31 228 views
0

這裏是從XML文件中的一個片段,我試圖解析:Android開發人員:解析XML文件

<Item xsi:type="TextureItem" Name="Texture_0044" Visible="true"> 
    <Position> 
     <X>240</X> 
     <Y>432</Y> 
    </Position> 
    <CustomProperties> 
     <Property Name="type" Type="string" Description="slot_rectangle"> 
      <string /> 
     </Property> 
    </CustomProperties> 
    <Rotation>0</Rotation> 
    <Scale> 
     <X>1</X> 
     <Y>1</Y> 
    </Scale> 
    <TintColor> 
     <R>255</R> 
     <G>255</G> 
     <B>255</B> 
     <A>255</A> 
     <PackedValue>4294967295</PackedValue> 
    </TintColor> 
</Item> 

我使用的是XmlResourceParser對象來解析XML文件,這裏是我到目前爲止的代碼:

XmlResourceParser xrp = context.getResources().getXml(R.xml.level_1); 

int eventType = xrp.getEventType(); 
while (eventType != XmlPullParser.END_DOCUMENT) { 
    if(eventType == XmlPullParser.START_DOCUMENT) { 
     //System.out.println("Start document"); 
    } else if(eventType == XmlPullParser.START_TAG) { 
     //System.out.println("Start tag "+xrp.getName()); 
     if (xrp.getName().equals("Item")) { 
      //... 
     } 
    } else if(eventType == XmlPullParser.END_TAG) { 
     //System.out.println("End tag "+xrp.getName()); 
    } else if(eventType == XmlPullParser.TEXT) { 
     //System.out.println("Text "+xrp.getText()); 
    } 
    eventType = xrp.next(); 
} 
System.out.println("End document"); 
xrp.close(); 

我試圖做的是有它使每一個項目標籤,發現它會得到屬性標籤的「說明」的值,在X的文本值和Y標籤內的時間位置標記以及Rotation標記的文本值,僅此而已。

現在我正在考慮它在哪裏說if(xrp.getName()。equals(「Item」))只是複製並粘貼外部解析代碼到內部,如果條件,然後上升和直到獲得我想要的值,直到Item標記事件的END_TAG發生,但這看起來效率很低且令人困惑。

我想要的東西就像是一個xrp.Item.Position.X.getText()類型的交易,如果你知道我的意思,做這樣的事情存在嗎?

謝謝!

+1

「有點像xrp.Item.Position.X.getText()」。您所描述的內容與XPath類似。你可以看看這個,看看它是否有幫助... http://www.w3schools.com/xpath/xpath_syntax.asp - 它在Android中支持這個包http://developer.android.com/reference/javax /xml/xpath/package-summary.html缺點是它需要加載整個XML文檔,所以如果文檔很大,可能會導致性能問題或「內存不足」問題。 – Squonk 2011-05-31 04:37:26

回答

2

你在正確的軌道上。只需創建一個映射到您期望的對象模型並在解析XML時填充它。你需要輕量級的數據表示,而不是在需要值時嘗試使用xpath。

+0

謝謝,我最終做的和你的解決方案一樣粗糙。 – 2011-05-31 05:33:28

+0

或者你可以使用簡單的XML並避免所有這些樣板代碼。只是一個建議;它好多了。只要看看它。 – 2011-05-31 22:38:11