1

我想解析我自己的 XML 文件,所以我从 Internet 下载了一个简单的 Parser。

public class ParsingXML extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // setContentView(R.layout.main);
    setContentView(R.layout.relativelayout);
    TextView journal = (TextView) findViewById(R.id.journal);
    TextView publisher = (TextView) findViewById(R.id.publisher);
    TextView edition1 = (TextView) findViewById(R.id.edition1);
    TextView title1 = (TextView) findViewById(R.id.title1);
    TextView author1 = (TextView) findViewById(R.id.author1);

    TextView edition2 = (TextView) findViewById(R.id.edition2);
    TextView title2 = (TextView) findViewById(R.id.title2);
    TextView author2 = (TextView) findViewById(R.id.author2);

    try {
        XmlResourceParser xpp = getResources().getXml(R.xml.catalog);

        xpp.next();
        int eventType = xpp.getEventType();
        int iter = 0;
        String elemtext = null;

        while (eventType != XmlPullParser.END_DOCUMENT) {

            if (eventType == XmlPullParser.START_TAG) {

                String elemName = xpp.getName();
                if (elemName.equals("catalog")) {
                    String journalAttr = xpp.getAttributeValue(null,
                            "journal");
                    String publisherAttr = xpp.getAttributeValue(null,
                            "publisher");
                    journal.setText(journalAttr);
                    publisher.setText(publisherAttr);
                }
                if (elemName.equals("article")) {
                    iter = iter + 1;
                }

                if (elemName.equals("edition")) {
                    elemtext = "edition";
                }
                if (elemName.equals("title")) {
                    elemtext = "title";
                }
                if (elemName.equals("author")) {
                    elemtext = "author";
                }
            }

            else if (eventType == XmlPullParser.TEXT) {
                if (iter == 1) {
                    if (elemtext.equals("edition")) {
                        edition1.setText(xpp.getText());
                    } else if (elemtext.equals("title")) {
                        title1.setText(xpp.getText());
                    } else if (elemtext.equals("author")) {
                        author1.setText(xpp.getText());
                    }
                }

                else if (iter == 2) {
                    if (elemtext.equals("edition")) {
                        edition2.setText(xpp.getText());
                    } else if (elemtext.equals("title")) {
                        title2.setText(xpp.getText());
                    } else if (elemtext.equals("author")) {
                        author2.setText(xpp.getText());
                    }

                }
            }
            eventType = xpp.next();
        }

    } catch (XmlPullParserException e) {
    } catch (IOException e) {
    }

}
}









<?xml version = '1.0' encoding = 'UTF-8'?>
<catalog journal="sample journal" publisher="sample journal">
<article>
    <edition>EDITION 1</edition>
    <title>TITLE 1</title>
    <author>AUTHOR 1</author>
</article>
<article>
    <edition>EDITION 2</edition>
    <title>TITLE 2</title>
    <author>AUTHOR 2</author>
</article><article>
    <edition>EDITION 3</edition>
    <title>TITLE 3</title>
    <author>AUTHOR 3</author>
</article><article>
    <edition>EDITION 4</edition>
    <title>TITLE 4</title>
    <author>AUTHOR 4</author>
</article><article>
    <edition>EDITION 5</edition>
    <title>TITLE 5</title>
    <author>AUTHOR 5</author>
</article>
</catalog>

问题:每个元素都有 2 个 TextView,但我的 XML 文件包含更多元素。如何让解析器将下一个元素写入字符串,以便 TextView 显示下一个元素?

谢谢

4

1 回答 1

1

如果您的 xml 文件中有 1000 个元素怎么办?你会创建一个有这么多视图的布局吗?

您应该创建一个表示文章元素的布局文件,并在读取 xml 时,从 xml 数据初始化布局并将其膨胀到您的活动视图。

这是 LayoutInflater:http: //developer.android.com/reference/android/view/LayoutInflater.html

示例:如何使用布局扩展一个视图

于 2012-09-20T18:21:22.133 回答