首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用XmlPullparser解析嵌套元素?

如何使用XmlPullparser解析嵌套元素?
EN

Stack Overflow用户
提问于 2015-01-16 03:47:31
回答 2查看 1.1K关注 0票数 1

这是我的xml文件:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<frames>
<frame>
    <name>FRAME-A</name>
    <coordinatesA>
       <x>75</x>
       <y>75</y>
    </coordinatesA>
    <coordinatesB>
       <x>75</x>
       <y>490</y>
    </coordinatesB>
    <coordinatesC>
       <x>645</x>
       <y>75</y>
   </coordinatesC>
    <coordinatesD>
       <x>1215</x>
       <y>75</y>
    </coordinatesD>
    <coordinatesE>
        <x>0</x>
       <y>0</y>
    </coordinatesE>
    <image>@drawable/frameguideone</image>
</frame>

如何解析coordinatesA B、C、D、E标签中的x和y?我不知道该怎么做。有人能帮我解决这个问题吗?我在谷歌寻找它,但没有得到我的解决方案。

这是我的java解析:

代码语言:javascript
复制
public class XMLPullParserHandler {
List<Employee> frames;
private Employee frame;
private String text;

public XMLPullParserHandler() {
    frames = new ArrayList<Employee>();
}

public List<Employee> getEmployees() {
    return frames;
}

public List<Employee> parse(InputStream is) {
    XmlPullParserFactory factory = null;
    XmlPullParser parser = null;
    try {
        factory = XmlPullParserFactory.newInstance();
        factory.setNamespaceAware(true);
        parser = factory.newPullParser();

        parser.setInput(is, null);

        int eventType = parser.getEventType();
        while (eventType != XmlPullParser.END_DOCUMENT) {
            String tagname = parser.getName();
            switch (eventType) {
            case XmlPullParser.START_TAG:
                if (tagname.equalsIgnoreCase("frame")) {
                    // create a new instance of employee
                    frame = new Employee();
                }
                break;

            case XmlPullParser.TEXT:
                text = parser.getText();
                break;

            case XmlPullParser.END_TAG:
                if (tagname.equalsIgnoreCase("frame")) {
                    // add employee object to list
                    frames.add(frame);
                } else if (tagname.equalsIgnoreCase("name")) {
                    frame.setName(text);
                } else if (tagname.equalsIgnoreCase("coordinates")) {
                    frame.setCoordinates(Integer.parseInt(text));
                } else if (tagname.equalsIgnoreCase("image")) {
                    frame.setImage(text);
                }else if(tagname.equalsIgnoreCase("x")){
                    frame.setX(Integer.parseInt(text));
                }else if(tagname.equalsIgnoreCase("y")){
                    frame.setY(Integer.parseInt(text));
                }
                break;
            default:
                break;
            }
            eventType = parser.next();
        }

    } catch (XmlPullParserException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return frames;
}

}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-16 05:01:25

您的代码有两个问题。

首先,这是行不通的:

代码语言:javascript
复制
if (tagname.equalsIgnoreCase("coordinates")) {
    frame.setCoordinates(Integer.parseInt(text));
}

您必须具有与xml标记相同的名称或使用tagname.contains(“坐标”)。

其次,x和y总是等于0,因为你用一个新的值擦除了以前的值。因此,Employee对象应该包含一个坐标列表,每次遇到坐标标记时,您都应该创建一个新的坐标对象,设置x和y并将其添加到列表中。像这样的事情应该有效:

代码语言:javascript
复制
case XmlPullParser.START_TAG:
    if (tagname.equalsIgnoreCase("frame")) {
        frame = new Employee();
    } 
    else if (tagname.contains("coordinates")) {
        frame.addCoordinate(new Coordinate());
    } 
    break;

case XmlPullParser.END_TAG:
    if (tagname.equalsIgnoreCase("x")) {
        // get the coordinate object created in the START_TAG case
        frame.getLastCoordinates().setX(Integer.parseInt(text));
    }
    else if (tagname.equalsIgnoreCase("y")) {
        frame.getLastCoordinates().setY(Integer.parseInt(text));
    }

希望能帮上忙!

票数 0
EN

Stack Overflow用户

发布于 2015-01-16 04:00:48

读取坐标的开始标记时,创建一个新的坐标对象。在读取x和y时,在坐标上设置值。读取结束坐标标记时,将坐标设置在框架上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27977021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档