【问题标题】:How to work with XML files?如何处理 XML 文件?
【发布时间】:2012-12-26 17:38:50
【问题描述】:

我想在 ListView 中显示大陆的名称,我们称之为 listContinents 。例如,在选择 US 时,我想在那里显示所有州,我们称之为 ListStates。选择一个特定的州后,我想显示该州的所有城市,我们称之为 ListCity。选择一个城市后,我想显示一些关于该城市的信息,我们称之为 listCityInfo。这是我上面所说的总结。

大陆 >> >> 城市 >> 信息

如何创建一个包含所有信息的 XML 文件并从中读取?基本上我不知道怎么做。我将信息存储在 html 文件中,所以我应该将其转换为 XML 文件。这是要走的路吗?

如果 XML 文件包含所有信息,我将如何读取它。如果 XML 文件仅包含我知道如何阅读的大洲、州或城市,但当所有这些都存在时则不包含。我如何使它工作?我不想为每个州创建超过 500 个包含城市的 XML 文件,这会浪费时间。

是否有人可以使用任何示例向我说明这是如何工作的或将我链接到有用的网站?

我将不胜感激,谢谢!

【问题讨论】:

  • 好吧,创建 xml 应该相当简单:例如每个状态节点都会有多个城市节点;每个城市节点都会有多个信息节点等。只是想知道大型 xml 文件是否是可行的方法 - 进行“查找”可能很慢,或者将所有内容保存在内存中很昂贵。我可能会考虑为内容使用数据库。
  • html文件的大小约为56.3 KB,解析时会不会很慢?现在我将如何解析 xml 文件并提取信息?有tuts的链接吗?大多数 tuts 通过连接到网站来显示,这不是我正在做的。
  • 很难说,因为它取决于最终 xml 结构的复杂性、您使用的解析器(SAX 与 DOM)以及运行它的设备。使用 SimpleXML 或 Jackson 映射器之类的东西可能需要您进行最少的解析工作。我想说任何教程都可以,只要它解释实际的解析逻辑并将艰苦的工作委托给后台线程。 xml 内容的来源应该是无关紧要的。

标签: android xml parsing xml-parsing android-listview


【解决方案1】:

我会这样做。

  1. 将您的信息保存到 SQlite 数据库中,并将其放入资产文件夹中。 (但如果你熟悉 webservice,我建议你使用它。并使用​​ json,因为 xml 在 Android 中很麻烦)
  2. 阅读并填写到expandable listview
    Sample example

【讨论】:

  • 我不知道这是否是我应该走的路。我倾向于xml解析器,你不觉得它会更方便吗?
  • 数据库更方便。但是,如果您对解析 xml 感到满意,如果大小不是很大,您仍然可以将其放在资产文件夹中的 xml 文件中。性能方面,我不推荐使用 xml,尤其是在处理大文件时。有不同的方法来做到这一点。
【解决方案2】:
  File newxmlfile = new File("/data/com.itwine/emergency.xml");

        try{
                newxmlfile.createNewFile();
        }catch(IOException e){
                Log.e("IOException", "exception in createNewFile() method");
        }
        //we have to bind the new file with a FileOutputStream
        FileOutputStream fileos = null;        
        try{
                fileos = new FileOutputStream(newxmlfile);
        }catch(FileNotFoundException e){
                Log.e("FileNotFoundException", "can't create FileOutputStream");
        }
        //we create a XmlSerializer in order to write xml data
        XmlSerializer serializer = Xml.newSerializer();
        try {
                //we set the FileOutputStream as output for the serializer, using UTF-8 encoding
                        serializer.setOutput(fileos, "UTF-8");
                        //Write <?xml declaration with encoding (if encoding not null) and standalone flag (if standalone not null)
                        serializer.startDocument(null, Boolean.valueOf(true));
                        //set indentation option
                        serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
                        //start a tag called "root"
                        serializer.startTag(null, "root");
                        *//**serializer.startTag(null, "Child1");
                        serializer.endTag(null, "Child1");
                        serializer.startTag(null, "Child2");
                        serializer.attribute(null, "attribute", "value");
                        serializer.endTag(null, "Child2");*//*
                        serializer.startTag(null, "EmailId");
                        serializer.text(txtemailid.getText().toString());
                        serializer.endTag(null,"EmailId");
                        serializer.startTag(null, "PhoneNo");
                        serializer.text(txtphoneno.getText().toString());
                        serializer.endTag(null,"PhoneNo");
                        serializer.endTag(null,"root");
                        serializer.endDocument();
                        //write xml data into the FileOutputStream
                        serializer.flush();
                        //finally we close the file stream
                        fileos.close();
                       Toast.makeText(getApplication(), "xml created",Toast.LENGTH_LONG);
                } catch (Exception e) {
                        Log.e("Exception","error occurred while creating xml file");
                }

是的,有一种方法。您可以使用 FileOutputStream 编写 Xmlfile。并使用 XMLserializer 设置属性和标签。看看我给出的示例。

【讨论】:

  • 抱歉,因为只是以绝对零解释倾倒一堆代码而没有回答可能是 OP 问题中最重要的部分:Is this the way to go?
猜你喜欢
  • 1970-01-01
  • 2014-02-05
  • 2022-07-05
  • 2013-01-26
  • 1970-01-01
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多