【问题标题】:Android XML Reading ProblemAndroid XML 读取问题
【发布时间】:2011-07-28 05:17:23
【问题描述】:
public String parseCheck(File file) throws XPathExpressionException, SAXException, IOException
{

    Document doc=builder.parse(file);
    ....

我想读取一个 xml 文件,但是当它存在于 /res/xml/ 文件夹中时如何传递该文件。我找不到任何方法。

【问题讨论】:

    标签: android xml file parsing mobile


    【解决方案1】:

    我不知道您可以通过任何方式访问文件以获取已编译到资源中的内容。

    如果您乐于使用 InputStream,您可以将 XML 文件放入 assets 文件夹,然后执行以下操作:

    InputStream xmlStream = getAssets().open("myfile.xml");
    

    【讨论】:

      【解决方案2】:

      这是要读取的 XML 文件

      <maintag>
      <item>
      <name>AndroidPeople</name>
      <website category="android">www.androidpeople.com</website>
      </item>
      <item>
      <name>iPhoneAppDeveloper</name>
      <website category="iPhone">www.iphone-app-developer.com</website>
      </item>
      </maintag>
      

      XMLParsingExample.java

      your package name
      import java.net.URL;
      import javax.xml.parsers.SAXParser;
      import javax.xml.parsers.SAXParserFactory;
      import org.xml.sax.InputSource;
      import org.xml.sax.XMLReader;
      import android.app.Activity;
      import android.os.Bundle;
      import android.widget.LinearLayout;
      import android.widget.TextView;
      
      public class XMLParsingExample extends Activity {
      
      /** Create Object For SiteList Class */
      SitesList sitesList = null;
      
      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      
      /** Create a new layout to display the view */
      LinearLayout layout = new LinearLayout(this);
      layout.setOrientation(1);
      
      /** Create a new textview array to display the results */
      TextView name[];
      TextView website[];
      TextView category[];
      
      try {
      
      /** Handling XML */
      SAXParserFactory spf = SAXParserFactory.newInstance();
      SAXParser sp = spf.newSAXParser();
      XMLReader xr = sp.getXMLReader();
      
      /** Send URL to parse XML Tags */
      URL sourceUrl = new URL(
      "http://www.androidpeople.com/wp-content/uploads/2010/06/example.xml");
      
      /** Create handler to handle XML Tags ( extends DefaultHandler ) */
      MyXMLHandler myXMLHandler = new MyXMLHandler();
      xr.setContentHandler(myXMLHandler);
      xr.parse(new InputSource(sourceUrl.openStream()));
      
      } catch (Exception e) {
      System.out.println("XML Pasing Excpetion = " + e);
      }
      
      /** Get result from MyXMLHandler SitlesList Object */
      sitesList = MyXMLHandler.sitesList;
      
      /** Assign textview array lenght by arraylist size */
      name = new TextView[sitesList.getName().size()];
      website = new TextView[sitesList.getName().size()];
      category = new TextView[sitesList.getName().size()];
      
      /** Set the result text in textview and add it to layout */
      for (int i = 0; i < sitesList.getName().size(); i++) {
      name[i] = new TextView(this);
      name[i].setText("Name = "+sitesList.getName().get(i));
      website[i] = new TextView(this);
      website[i].setText("Website = "+sitesList.getWebsite().get(i));
      category[i] = new TextView(this);
      category[i].setText("Website Category = "+sitesList.getCategory().get(i));
      
      layout.addView(name[i]);
      layout.addView(website[i]);
      layout.addView(category[i]);
      }
      
      /** Set the layout view to display */
      setContentView(layout);
      
      }
      }
      

      MyXMLHandler.java

       your package name
          import org.xml.sax.Attributes;
          import org.xml.sax.SAXException;
          import org.xml.sax.helpers.DefaultHandler;
      
          public class MyXMLHandler extends DefaultHandler {
      
          Boolean currentElement = false;
          String currentValue = null;
          public static SitesList sitesList = null;
      
          public static SitesList getSitesList() {
          return sitesList;
          }
      
          public static void setSitesList(SitesList sitesList) {
          MyXMLHandler.sitesList = sitesList;
          }
      
          /** Called when tag starts ( ex:- <name>AndroidPeople</name>
          * -- <name> )*/
          @Override
          public void startElement(String uri, String localName, String qName,
          Attributes attributes) throws SAXException {
      
          currentElement = true;
      
          if (localName.equals("maintag"))
          {
          /** Start */
          sitesList = new SitesList();
          } else if (localName.equals("website")) {
          /** Get attribute value */
          String attr = attributes.getValue("category");
          sitesList.setCategory(attr);
          }
      
          }
      
          /** Called when tag closing ( ex:- <name>AndroidPeople</name>
          * -- </name> )*/
          @Override
          public void endElement(String uri, String localName, String qName)
          throws SAXException {
      
          currentElement = false;
      
          /** set value */
          if (localName.equalsIgnoreCase("name"))
          sitesList.setName(currentValue);
          else if (localName.equalsIgnoreCase("website"))
          sitesList.setWebsite(currentValue);
      
          }
      
          /** Called to get tag characters ( ex:- <name>AndroidPeople</name>
          * -- to get AndroidPeople Character ) */
          @Override
          public void characters(char[] ch, int start, int length)
          throws SAXException {
      
          if (currentElement) {
          currentValue = new String(ch, start, length);
          currentElement = false;
          }
      
          }
      
          }
      

      SitesList.java

      your package name
      import java.util.ArrayList;
      
      /** Contains getter and setter method for varialbles */
      public class SitesList {
      
      /** Variables */
      private ArrayList<String> name = new ArrayList<String>();
      private ArrayList<String> website = new ArrayList<String>();
      private ArrayList<String> category = new ArrayList<String>();
      
      /** In Setter method default it will return arraylist
      * change that to add */
      
      public ArrayList<String> getName() {
      return name;
      }
      
      public void setName(String name) {
      this.name.add(name);
      }
      
      public ArrayList<String> getWebsite() {
      return website;
      }
      
      public void setWebsite(String website) {
      this.website.add(website);
      }
      
      public ArrayList<String> getCategory() {
      return category;
      }
      
      public void setCategory(String category) {
      this.category.add(category);
      }
          }
      

      上面是完美的工作代码..你可以从XMLParsing.zip下载它希望这对你有用谢谢Pragna

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 2013-04-10
        • 2017-02-10
        • 2023-03-25
        • 2016-11-11
        相关资源
        最近更新 更多