【问题标题】:how can parse this xml file? [closed]如何解析这个xml文件? [关闭]
【发布时间】:2017-12-13 19:12:46
【问题描述】:

如何在 android 中解析具有这种结构的文件?

请帮忙

我尝试了很多,但我无法在 Android 上解析此文件

<?xml version="1.0" encoding="utf-8" ?>
<book>
<season id="1" name="one">
    <page id="1-1" text="Page content 1" />
    <page id="1-2" text="Page content 2" />
    <page id="1-3" text="Page content 3" />
</season>
<season id="2" name="two">
    <page id="2-1" text="Page content 1" />
    <page id="2-2" text="Page content 2" />
    <page id="2-3" text="Page content 3" />
    <page id="2-4" text="Page content 4" />
    <page id="2-5" text="Page content 5" />
    <page id="2-6" text="Page content 6" />
</season>
<season id="3" name="three">
    <page id="3-1" text="Page content 1" />
    <page id="3-2" text="Page content 2" />
    <page id="3-3" text="Page content 3" />
    <page id="3-4" text="Page content 4" />
    <page id="3-5" text="Page content 5" />
    <page id="3-6" text="Page content 6" />
</season>
</book>

这是我的代码: 我的班级名称是 XmlReader 我在 onCreate() 方法中使用这个类

public class XmlReader
{
List<Season> Seasons;
private Season season;
private String text;

public XmlReader()
{
    Seasons = new ArrayList<Season>();
}

public List<Season> getSeasons() {
    return Seasons;
}

public List<Season> parse(InputStream is){
    XmlPullParserFactory factory = null;
    XmlPullParser parser = null;
    try {
        factory = XmlPullParserFactory.newInstance();
        factory.setNamespaceAware(true);
        parser = factory.newPullParser();
        parser.setInput(is, null);

        int eventType = parser.getEventType();
        while(eventType != XmlPullParser.END_DOCUMENT)
        {
            String tagname = parser.getName();
            switch (eventType)
            {
                case XmlPullParser.START_TAG:
                    if (tagname.equalsIgnoreCase("season"))
                    {
                        season = new Season();

                        season.setSeason_id( (Integer.parseInt(parser.getAttributeValue(0)) ) );

                        season.setSeason_name( parser.getAttributeValue(1) );
                    }
                    break;
                case XmlPullParser.END_TAG:
                    if (tagname.equalsIgnoreCase("season"))
                    {
                        seasons.add(season);
                    }
                    else if (tagname.equalsIgnoreCase("page"))
                    {

                        season.setPage_id(Integer.parseInt(parser.getAttributeValue(0)));
                        season.setPage_text( parser.getAttributeValue(1) );
                    }
                    break;
                default:
                    break;
            }
            eventType=parser.next();
        }
    }
    catch (XmlPullParserException | IOException e)
    {
        e.printStackTrace();
    }
    return season;
}
}

【问题讨论】:

  • 你用什么解析的?
  • 显示你的代码你尝试了什么
  • @mohammadkiani 发布您的代码,
  • I tried a lot 显示究竟如何,我们将帮助修复它。您不应该要求完整的代码,我们只能帮助修复您的代码。
  • 请将您的代码添加到问题中。不是您的代码的链接。它对我不起作用。

标签: android xml xml-parsing


【解决方案1】:

试试这个

   try {
                InputStream mInputStream = getAssets().open("XmlData.xml");

                 XmlPullParserFactory xmlFactoryObject = XmlPullParserFactory.newInstance();
                 XmlPullParser myparser = xmlFactoryObject.newPullParser();

                myparser.setInput(mInputStream, null);


                int event = myparser.getEventType();
                while (event != XmlPullParser.END_DOCUMENT)  {
                    String name=myparser.getName();
                    switch (event){
                        case XmlPullParser.START_TAG:
                            break;

                        case XmlPullParser.END_TAG:
                            if(name.equals("page")){

                                Log.e("TAG",""+  myparser.getAttributeValue(null,"id"));
                                Log.e("Page content ",""+  myparser.getAttributeValue(null,"text"));

                            }
                            break;
                    }
                    event = myparser.next();
                }

            } catch (Exception e) {
                e.printStackTrace();
            }

【讨论】:

  • 谢谢。这段代码对我有用
  • 欢迎@mohammadkiani
【解决方案2】:

您可能一直在寻找的是 DOM 解析器。DOMParser 可以将 XML 或 HTML 源解析为 DOM 文档。

【讨论】:

    猜你喜欢
    • 2013-06-07
    • 2012-08-26
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    相关资源
    最近更新 更多