【问题标题】:Android Parse XML AttributeAndroid 解析 XML 属性
【发布时间】:2012-11-03 17:13:27
【问题描述】:

我正在解析两个 xml 文件 - 我已经使用 XmlParser 成功解析了第一个文件:-

public final String getElementValue(Node elem) {
    Node child;
    if (elem != null) {
        if (elem.hasChildNodes()) {
            for (child = elem.getFirstChild(); child != null; child = child
                    .getNextSibling()) {
                if (child.getNodeType() == Node.TEXT_NODE) {
                    System.out.println("±VALUE: "
                            + child.getNodeValue().toString()
                            + " node type: " + child.getNodeType());
                    return child.getNodeValue();
                }

然而,下一个 xml 文件具有我需要的属性。我可以使用相同的解析器吗?如果可以,我该如何更改它以读取属性?我要读取的文件是http://cloud.tfl.gov.uk/TrackerNet/LineStatus - 我需要行名和状态描述。

我正在使用另一个带有 KEY 的类 - 我如何明确说明我需要哪个属性?即以下:-

static final String KEY_TRANSPORT = "LineStatus"; // parent node
static final String KEY_LINENAME = "???";
static final String KEY_LINEDESC = "???";

谢谢!

【问题讨论】:

    标签: android xml parsing xml-parsing


    【解决方案1】:

    关于 XML 的事情是您需要读取/解析整个文件才能检索任何信息,您不能只读取您需要的位。您应该阅读该文件一次并将您可能需要的所有信息存储在另一个类中,以便以后检索它。

    以下是我学习从档案中解析 XML 的方法,但是,我使用了 SAXParser。您需要在 startElement 和 endElement 上将布尔值设置为 true 或 false 以跟踪您在 XML 文档中读取标签的位置,然后覆盖字符并在那里恢复字符串,将其存储在持有者类中,具体取决于哪些布尔值是 true,记住该布尔值告诉您您在文档中的位置。

    如果您有一个复杂的文档,并且需要检索大量信息,则 Handler 可能有很多子级别,您需要仔细检查,因为它容易混淆和出错。

    SAXParser:

    http://www.anddev.org/parsing_xml_from_the_net_-_using_the_saxparser-t353.html http://www.androidpeople.com/android-xml-parsing-tutorial-using-saxparser


    或者使用 XMLPullParser,您可以使用循环进入标签内部,然后在您要查找的标签内存储信息。不过,我从未使用过这种方法,因此无法将效率与第一种方法进行比较。在任何情况下,您都需要浏览标签,直到找到您要查找的标签。这里是:

    XmlPullParser tutorials;
    tutorials = XmlPullParserFactory.newInstance().newPullParser();
    tutorials.setInput(downloadPath.openStream(), null);
    
    while (eventType != XmlPullParser.END_DOCUMENT) {
        if (eventType == XmlPullParser.START_TAG) {
            String tagName = tutorials.getName();
            if (tagName.equals("item")) {
                // inner loop looking for link and title
                while (eventType != XmlPullParser.END_DOCUMENT) {
                    if (eventType == XmlPullParser.START_TAG) {
                        if (tutorials.getName().equals("link")) {
                        } else if (tutorials.getName().equals(
                                "title")) {
                        }
                    } else if (eventType == XmlPullParser.END_TAG) {
                        if (tutorials.getName().equals("item")) {
                            // save the data, and then continue with
                            // the outer loop
                            break;
                        }
                    }
                    eventType = tutorials.next();
                }
            }
        }
        eventType = tutorials.next();
    }
    

    【讨论】:

    • 在此处找到的最后一种方法:(第 6 步)tutsplus(我似乎仅限于两个链接)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 2010-11-02
    相关资源
    最近更新 更多