【问题标题】:Android Dev: Parsing a XML fileAndroid 开发:解析 XML 文件
【发布时间】: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() 之类的交易,如果你明白我的意思的话,这样的事情是否存在?

谢谢!

【问题讨论】:

标签: java android xml


【解决方案1】:

你在正确的轨道上。只需创建一个映射到您期望的对象模型并在解析 XML 时将其填充。最好使用轻量级的数据表示,而不是在需要值时尝试使用 xpath。

【讨论】:

  • 谢谢,我最终做的和你的解决方案大致相同。
  • 或者您可以使用 simple-XML 并避免所有这些样板代码。只是一个建议;它好多了。看看吧。
猜你喜欢
  • 2013-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多