android如何解析xml获取属性和元素

标签 android xml

我有这个 xml 链接
enter image description here

如何解析它以获取 emp 的名称和列表 img。我想使用 SAXparser 或 xmlPullparser,但我不知道该怎么做。抱歉我的英语不好。请帮助我

最佳答案

尝试使用此处描述的 XmlPullParser http://developer.android.com/training/basics/network-ops/xml.html

public class EmployeeXmlParser {
    private static final String ns = null;

    // We don't use namespaces

    public Detail parse(InputStream in) throws XmlPullParserException, IOException {
        try {
            XmlPullParser parser = Xml.newPullParser();
            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
            parser.setInput(in, null);
            parser.nextTag();
            return readDetail(parser);
        } finally {
            in.close();
        }
    }

    private Detail readDetail(XmlPullParser parser) throws XmlPullParserException, IOException {
        Detail detail = new Detail();

        parser.require(XmlPullParser.START_TAG, ns, "employees");
        while (parser.next() != XmlPullParser.END_TAG) {
            if (parser.getEventType() != XmlPullParser.START_TAG) {
                continue;
            }
            String tag = parser.getName();
            // Starts by looking for the entry tag
            if (tag.equals("detail")) {
                detail.entries = readEmployees(parser);
            } else {
                skip(parser);
            }
        }
        return detail;
    }

    private List<Employee> readEmployees(XmlPullParser parser) throws XmlPullParserException, IOException {
        List<Employee> entries = new ArrayList<Employee>();

        parser.require(XmlPullParser.START_TAG, ns, "detail");
        while (parser.next() != XmlPullParser.END_TAG) {
            if (parser.getEventType() != XmlPullParser.START_TAG) {
                continue;
            }
            String tag = parser.getName();
            // Starts by looking for the entry tag
            if (tag.equals("emp")) {
                entries.add(readEmployee(parser));
            } else {
                skip(parser);
            }
        }
        return entries;
    }


    private Employee readEmployee(XmlPullParser parser) throws XmlPullParserException, IOException {
        parser.require(XmlPullParser.START_TAG, ns, "emp");
        String name = parser.getAttributeValue(null, "name");
        String link = null;
        while (parser.next() != XmlPullParser.END_TAG) {
            if (parser.getEventType() != XmlPullParser.START_TAG) {
                continue;
            }

            String tag = parser.getName();
            if (tag.equals("img")) {
                link = readText(parser);
            } else {
                skip(parser);
            }
        }
        return new Employee(name, link);
    }


    // For the tags name and summary, extracts their text values.
    private String readText(XmlPullParser parser) throws IOException, XmlPullParserException {
        String result = "";
        if (parser.next() == XmlPullParser.TEXT) {
            result = parser.getText();
            parser.nextTag();
        }
        return result;
    }

    // Skips tags the parser isn't interested in. Uses depth to handle nested tags. i.e.,
    // if the next tag after a START_TAG isn't a matching END_TAG, it keeps going until it
    // finds the matching END_TAG (as indicated by the value of "depth" being 0).
    private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
        if (parser.getEventType() != XmlPullParser.START_TAG) {
            throw new IllegalStateException();
        }
        int depth = 1;
        while (depth != 0) {
            switch (parser.next()) {
                case XmlPullParser.END_TAG:
                    depth--;
                    break;
                case XmlPullParser.START_TAG:
                    depth++;
                    break;
            }
        }
    }

    public static class Detail {
        public List<Employee> entries = new ArrayList<Employee>();
    }

    public static class Employee {
        public final String name;
        public final String link;

        private Employee(String name, String link) {
            this.name = name;
            this.link = link;
        }
    }

}

关于android如何解析xml获取属性和元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35447452/

相关文章:

xml - 使用Powershell解析具有变量类型的XML文件

java - 为什么 Java 中的 XML Dom 会报告额外的节点?

java - 提交的 EditText 不会相应地表现

java - 为什么我会出现无法调用类布局.XmlLayout 中的工厂方法?

android - TCP 和 UDP 无线与谷歌眼镜

Android:联系人的 Facebook ID

xml - 使用 R 下载并读取压缩的 xml 文件

java - 使用 boost::posix_time::ptime 序列化 XML 表示创建 Java 对象

android - 如何在 API 29 或 Android Q 中使用 DownloadManager 下载文件?

java - 如何计算具体值 - Eclipse