【问题标题】:Convert getXml() to InputStream for SAX Parser将 getXml() 转换为 SAX 解析器的 InputStream
【发布时间】:2014-03-16 12:08:03
【问题描述】:

我从资产中获取文件。

InputStream asset = packageResources.getAssets().open("some.xml");

我有 InputStream 但是当我使用时

packageResources.getXml(appFilterResId);

我有 XmlResourceParser,但我需要 InputStream。 知道怎么做吗?

更新

try {
    XMLReader xmlReader = SAXParserFactory.newInstance().newSAXParser()
            .getXMLReader();
    // create a SAXXMLHandler
    SAXXMLHandler saxHandler = new SAXXMLHandler(manager, packName);
    // store handler in XMLReader
    xmlReader.setContentHandler(saxHandler);
    // the process starts
    xmlReader.parse(new InputSource(xmlInputStream));
    // get the `Employee list`
    icons = saxHandler.getIcons();

} catch (Exception ex) {
    Log.d("XML", "SAXXMLParser: parse() failed");
}

这里:

xmlReader.parse(new InputSource(xmlInputStream));

需要输入流

【问题讨论】:

  • @pskink 问题已更新
  • 所以把你的xml数据放到assets文件夹里,有什么问题?
  • @pskink 文件不在资产中,在 xml 中:/
  • 为什么?为什么在 res/xml 中?
  • @pskink 默认在其他应用中有

标签: android xml inputstream


【解决方案1】:

如果您希望通过 r.id .. 在 inputstream 中获取 xml,您可以尝试这种方式。

 InputStream is = this.getResources().openRawResource(R.xml.appxml);

更新:我在我的示例应用中进行了尝试,它运行良好。这是我的资产文件夹 app.xml 中的 xml

<stuff> hello </stuff>

这里是xml解析器代码:

    XMLReader reader = SAXParserFactory.newInstance().newSAXParser()
                .getXMLReader();         

     class myhanlder implements ContentHandler { //this is ur SAXXMLHandler class .. not sure u implmented which handler..

             public myhanlder() {super(); }
                     public void  getIcon() { System.out.println(" ICON " ); }
          @Override  //other Override  methods impl ..
           // ...
           // ..
            //..
        };

            myhanlder handler = new myhanlder();
        reader.setContentHandler(handler);    
        InputStream in =  this.getResources().openRawResource(R.xml.app);
            reader.parse(new InputSource(in));
        handler.getIcon() ;

【讨论】:

  • res/xml 和 assets 文件夹中不能有相同的文件
  • @Neha 我通过packageResources = manager.getResourcesForApplication(packName);从其他应用程序获取该文件
  • @KrisGroove 所以你的意思是说试图访问其他应用程序 xml 文件,当你这样做时 packageResource.getAssets().open("xml") 它的工作原理但是当你试图得到喜欢这:packageResource.openRawResource(xml.id) 它不起作用.. 你确定 xml 文件位于其他应用程序的 res/xml 文件夹中吗? ?检查来自 openRawresource 的输入流是否为空!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-17
  • 1970-01-01
  • 1970-01-01
  • 2011-08-14
  • 1970-01-01
  • 1970-01-01
  • 2013-01-17
相关资源
最近更新 更多