【发布时间】:2011-05-31 02:57:48
【问题描述】:
这是我试图解析的 XML 文件中的一个 sn-p:
<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() 之类的交易,如果你明白我的意思的话,这样的事情是否存在?
谢谢!
【问题讨论】:
-
“有点像 xrp.Item.Position.X.getText()”。您在那里描述的内容类似于 XPath。你可以看看这个看看它是否有帮助...w3schools.com/xpath/xpath_syntax.asp - 这个包在 Android 中支持它developer.android.com/reference/javax/xml/xpath/… 缺点是它需要加载整个 XML 文档,所以如果文档很大,它可能会导致性能问题或“内存不足”问题。