0

我正在解析两个 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 = "???";

谢谢!

4

1 回答 1

1

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

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

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

SAX解析器:

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();
}
于 2012-11-03T18:33:45.803 回答