如何解析这个xml文件? [关闭]

Posted

技术标签:

【中文标题】如何解析这个xml文件? [关闭]【英文标题】:how can parse this xml file? [closed] 【发布时间】: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 显示究竟如何,我们将帮助修复它。您不应该要求完整的代码,我们只能帮助修复您的代码。 请将您的代码添加到问题中。不是您的代码的链接。它对我不起作用。 【参考方案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 文档。

【讨论】:

以上是关于如何解析这个xml文件? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用基于标签的 XML::Twig 解析器在 Unix 上清理 xml 文件 [关闭]

某些行的 XML 文件解析错误 [关闭]

如何解析这个xml文件里边的字符串,谁解答一下,加高分

解析xml文件,如何动态的封装成一个java类

如何在 C# 中解析非常大的 XML 文件? [复制]

如何创建接收XML的Web服务? [关闭]