【问题标题】:Parse XML from local file instead from URL从本地文件而不是从 URL 解析 XML
【发布时间】:2012-11-22 03:46:41
【问题描述】:

所以在您的指南之后,我将代码更改为这个,但应用程序只是挂起...... 下一步是什么?从

调用 getXML
Document xml = XMLemailF.getXML();

.

    public static Document getXML(){     
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

    // get a document builder
    DocumentBuilder db = null;
    try {
        db = dbf.newDocumentBuilder();
    } catch (ParserConfigurationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    //parse using builder to get DOM representation of the XML file
    Document doc = null;
    try {
        doc = db.parse("/xxxxxx/res/xml/email.xml");
    } catch (SAXException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return doc;

}

这叫

public static int numResults(Document doc){     
    Node results = doc.getDocumentElement();
    int res = -1;

    try{
        res = Integer.valueOf(results.getAttributes().getNamedItem("count").getNodeValue());
    }catch(Exception e ){
        res = -1;
    }

    return res;
}

通过这个

...
Document xml = XMLemailF.getXML();

    int numResults = XMLemailF.numResults(xml);

    if((numResults <= 0)){
        Toast.makeText(contactus_email.this, "No results found", Toast.LENGTH_LONG).show();  
        finish();
    }

    NodeList nodes = xml.getElementsByTagName("result");

    for (int i = 0; i < nodes.getLength(); i++) {                           
        HashMap<String, String> map = new HashMap<String, String>();    

        Element e = (Element)nodes.item(i);
        map.put("email", XMLemailF.getValue(e, "email"));
        map.put("line1", XMLemailF.getValue(e, "line1"));
        mylist.add(map);
...

有什么想法吗?

【问题讨论】:

  • 你想做什么?顺便说一句,你的问题的标题已经和内容无关了……这肯定和原来的问题不一样
  • 我不知道如何在 cmets 中粘贴代码。我只是希望它们被解析成一个列表视图。如果我从互联网上获取 xml,一切正常。原始代码提供字符串输出,但您的部分是文档输出。我在那里堆积...如果出于存档原因无法帮助我,将重新发布第一个问题。提前谢谢

标签: java android xml parsing url


【解决方案1】:

像这样使用 application.getResourceAsStream("your file name")

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(application.getResourceAsStream("file.xml"));

【讨论】:

    【解决方案2】:

    这是使用SAXPArser读取sdcard上的xml文件的方法

    public static RSSFeed parseLocalXml(String filename){
        try {
    
    
    
            SAXParserFactory factory = SAXParserFactory.newInstance();
            factory.setNamespaceAware(true);
    
            SAXParser parser = factory.newSAXParser();
    
            XMLReader xmlreader = parser.getXMLReader();
    
            RSSHandler theRssHandler = new RSSHandler();
    
            xmlreader.setContentHandler(theRssHandler);
    
            InputSource is = new InputSource(new FileInputStream(filename));
    
            xmlreader.parse(is);
    
            return theRssHandler.getFeed();//this is handler that reads trough xml nodes
        } catch (Exception ee) {
    
            return null;
        }
    }
    

    【讨论】:

      【解决方案3】:

      当然可以

      尝试类似:

      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
      
      // get a document builder
      DocumentBuilder db = dbf.newDocumentBuilder();
      
      //parse using builder to get DOM representation of the XML file
      Document doc = db.parse("yourFile.xml");
      

      并查看这些类的 javadoc 以获取更多信息

      【讨论】:

      • 感谢您的快速响应。我要换什么?我有点迷茫
      • 这替换了整个第一部分。你可以忘记整个 httpClient 部分。获得文档后,您可以调用 numResults(doc)
      • 当我尝试这个时,我在 dbf.newDocumentBuilder(); 上得到 Unhandled exception type IOException;和 db.parse("email.xml");
      • 是的,你需要用 try/catch 包围代码或者抛出异常。如果您在 Eclipse 中开发,“快速修复”应该可以帮助您
      • 好的,谢谢您的不断帮助。我要返回什么?如果我返回文档,我会因为尝试/捕获而无法解决
      【解决方案4】:

      是否需要从本地文件中获取 xml DOM?我理解对了吗?

      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder = factory.newDocumentBuilder();
      Document doc = builder.parse(new FileInputStream("/path/to/your/file.xml");
      

      或者

      Document doc = builder.parse(getClass().getResourceAsStream("/path/to/your/resource.xml"));
      

      【讨论】:

      • 感谢您的快速响应。我要换什么?我有点迷茫
      • 只需将“/path/to/your/file.xml”替换为您的文件路径
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-31
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      • 1970-01-01
      相关资源
      最近更新 更多