以下是我尝试解析的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();
我要做的就是让它每次找到Item标签时都会得到Property标签的“Description”值,Position标签内的X和Y标签的文本值,以及Rotation标签的文本值,仅此而已。
现在我正在考虑它在哪里说 if(xrp.getName()。equals(“Item”))只是将外部解析代码复制并粘贴到if条件的内部并且然后上升和下降获取我想要的值,直到Item标签事件的END_TAG发生,但这似乎非常低效和令人困惑。
我想要的是xrp.Item.Position.X.getText()类似的交易如果你知道我的意思,是否存在这样的事情?
谢谢!
答案 0 :(得分:2)
你走在正确的轨道上。只需创建一个映射到您期望的对象模型,并在解析XML时填充它。您最好使用轻量级数据表示,而不是在需要值时尝试使用xpath。