Android Parse XML属性

时间:2012-11-03 17:13:28

标签: android xml parsing xml-parsing

我正在解析两个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 - 我需要行名称和状态描述。

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

以下是我从档案中学习解析XML的方法,但是,我使用了SAXParser。你需要在startElement和endElement上设置一个boolean为true或false来跟踪你正在读取标签的XML文档的位置,然后你覆盖字符并在那里恢复String,根据哪些布尔值是真的存储在holder类中,记住布尔人告诉你你在文件里的位置。

如果您有一个复杂的文档和想要检索的大量信息,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();
}