简体   繁体   English

从Android中的网络数据库解析XML文件

[英]parsing xml file from network database in android

i am trying to parse an xml file from an URL. 我正在尝试从URL解析xml文件。 I found an example in the following link 我在以下链接中找到了一个例子

http://www.anddev.org/parsing_xml_from_the_net_-_using_the_saxparser-t353.html
and tried using it in my code but it returned the values to be as null 并尝试在我的代码中使用它,但它返回的值为null

Following is my code of parsing xml 以下是我解析xml的代码

public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {

    URL url = new URL("http://www.siva.com/search");

    /** Handling XML */
    SAXParserFactory saxparserfactory = SAXParserFactory.newInstance();
    SAXParser saxparser = saxparserfactory.newSAXParser();
    XMLReader xmlreader = saxparser.getXMLReader();

    /* Create a new ContentHandler and apply it to the XML-Reader*/
    ForListXMLHandler forlistmyhandler = new ForListXMLHandler();
    xmlreader.setContentHandler(forlistmyhandler);

    /* Parse the xml-data from our URL. */
    xmlreader.parse(new InputSource(url.openStream()));
    /* Parsing has finished. */

    /* Our ExampleHandler now provides the parsed data to us. */
    ParsedDataSet parsedDataSet = forlistmyhandler.getParsedData();
    System.out.println(parsedDataSet.toString());
}

following is the code of MyXMLhandler 以下是MyXMLhandler的代码

public class ForListXMLHandler extends DefaultHandler {
    private boolean in_outertag = false;
    private boolean in_innertag = false;
    private boolean in_First_name = false;
    private boolean in_Last_name = false;

    private ParsedDataSet myParsedDataSet = new ParsedDataSet();

    public ParsedDataSet getParsedData() {
        return this.myParsedDataSet;
    }

    @Override
    public void startDocument() throws SAXException {
        this.myParsedDataSet = new ParsedDataSet();
    }

    @Override
    public void endDocument() throws SAXException {
        // Nothing to do
    }

    public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
        if (localName.equals("Searchdata")) {
            this.in_outertag = true;
        } else if (localName.equals("Searchdata")) {
            this.in_innertag = true;
        } else if (localName.equals("First_name")) {
            this.in_First_name = true;
        } else if (localName.equals("Last_name")) {
            this.in_Last_name = true;
        }
    }

    /**
     * Gets be called on closing tags like:
     * */
    @Override
    public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
        if (localName.equals("Searchdata")) {
            this.in_outertag = false;
        } else if (localName.equals("Searchdata")) {
            this.in_innertag = false;
        } else if (localName.equals("First_name")) {
            this.in_First_name = false;
        } else if (localName.equals("Last_name")) {
            // Nothing to do here
        }
    }

    /**
     * Gets be called on the following structure: characters
     */
    @Override
    public void characters(char ch[], int start, int length) {
        if (this.in_First_name) {
            myParsedDataSet.setfirstname(new String(ch, start, length));
        }
        if (this.in_Last_name) {
            myParsedDataSet.setlastname(new String(ch, start, length));
        }
    }
}

next part is of my parsed data set class 下一部分是我解析的数据集类

public class ParsedDataSet {
    private String First_name = null;
    private String Last_name = null;

    public String getFirstname() {
        return First_name;
    }

    public void setfirstname(String First_name) {
        this.First_name = First_name;
    }

    public String getlastname() {
        return Last_name;
    }

    public void setlastname(String Last_name) {
        this.Last_name = Last_name;
    }

    public String toString() {
        return this.First_name + "n" + this.Last_name;
    }
}

pls tell me where i am getting error 请告诉我哪里出错了

The endElement method gets fired before the characters method, so your boolean variables are always set to false when the characters method gets fired. endElement方法在characters方法之前被触发,因此,在characters方法被触发时,布尔变量始终设置为false You should move some code from endElement to characters , something like this: 您应该将一些代码从endElement移至characters ,如下所示:

@Override
public void endElement(String namespaceURI, String localName, String qName) throws SAXException {

}

@Override
public void characters(char ch[], int start, int length) {
    if (this.in_First_name) {
        this.in_First_name = false;
        myParsedDataSet.setfirstname(new String(ch, start, length));
    }
    if (this.in_Last_name) {
       this.in_Last_name = false;
       myParsedDataSet.setlastname(new String(ch, start, length));
    }
}

You should also take a look here for a complete explanation on "Working with XML on Android". 您还应该在这里查看有关“在Android上使用XML”的完整说明。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM