Проблема чтения XML в Android - PullRequest
0 голосов
/ 28 июля 2011
public String parseCheck(File file) throws XPathExpressionException, SAXException, IOException
{

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

Я хочу прочитать файл xml, но как передать файл, когда он находится в папке / res / xml /. Я не мог найти способ.

Ответы [ 2 ]

0 голосов
/ 28 июля 2011

Я не знаю, каким образом вы сможете получить доступ к файлу для чего-то, что скомпилировано в ресурсы.

Если вы счастливы работать с InputStream, вы можете разместить свой XMLвместо этого файл в папку активов и выполните что-то вроде следующего:

InputStream xmlStream = getAssets().open("myfile.xml");
0 голосов
/ 28 июля 2011

это 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

...