Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取DefaultHandler类中XML标记的值_Java_Android_Xml - Fatal编程技术网

Java 获取DefaultHandler类中XML标记的值

Java 获取DefaultHandler类中XML标记的值,java,android,xml,Java,Android,Xml,我正在使用DefaultHandler为我的一个项目解析XML 假设我们有以下XML: <name id="11">something</name> <vicinity>vicinity value</vicinity> <type>establishment</type> 什么 邻近值 建立 在startElement(stringuri、stringlocalname、stringqname、Attributes-A

我正在使用
DefaultHandler
为我的一个项目解析XML

假设我们有以下XML:

<name id="11">something</name>
<vicinity>vicinity value</vicinity>
<type>establishment</type>
什么 邻近值 建立 在
startElement(stringuri、stringlocalname、stringqname、Attributes-Attributes)
方法中,我们可以在
localName
对象中获得父标记的名称,如
name
邻近区域
等,并在
属性
对象中获得其属性值,如
Attributes.getValue(“id”)

但是,如果我想获取标记之间的值而不是其属性,例如对于
邻近区域
没有属性,而是其内部的值,那么我如何在此处检索它呢


谢谢

您应该使用XMLPullParser(),因为它对于Android来说更简单、更高效

但是对于SAX,这里有一个关于如何解析的示例

XML:


android官方培训网站上有一堂关于解析XML数据的好课。他们的演示数据比你的更复杂:

<?xml version="1.0" encoding="utf-8"?> 
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" ...">     
<title type="text">newest questions tagged android - Stack Overflow</title>
...
    <entry>
    ...
    </entry>
    <entry>
        <id>http://stackoverflow.com/q/9439999</id>
        <re:rank scheme="http://stackoverflow.com">0</re:rank>
        <title type="text">Where is my data file?</title>
        <category scheme="http://stackoverflow.com/feeds/tag?tagnames=android&sort=newest/tags" term="android"/>
        <category scheme="http://stackoverflow.com/feeds/tag?tagnames=android&sort=newest/tags" term="file"/>
        <author>
            <name>cliff2310</name>
            <uri>http://stackoverflow.com/users/1128925</uri>
        </author>
        <link rel="alternate" href="http://stackoverflow.com/questions/9439999/where-is-my-data-file" />
        <published>2012-02-25T00:30:54Z</published>
        <updated>2012-02-25T00:30:54Z</updated>
        <summary type="html">
            <p>I have an Application that requires a data file...</p>
        </summary>
    </entry>
    <entry>
    ...
    </entry>
...
</feed>

import java.util.ArrayList;
import java.util.Stack;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class UserParserHandler extends DefaultHandler
{
//This is the list which shall be populated while parsing the XML.
private ArrayList userList = new ArrayList();

//As we read any XML element we will push that in this stack
private Stack elementStack = new Stack();

//As we complete one user block in XML, we will push the User instance in userList
private Stack objectStack = new Stack();

public void startDocument() throws SAXException
{
    //System.out.println("start of the document   : ");
}

public void endDocument() throws SAXException
{
    //System.out.println("end of the document document     : ");
}

public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException
{
    //Push it in element stack
    this.elementStack.push(qName);

    //If this is start of 'user' element then prepare a new User instance and push it in object stack
    if ("user".equals(qName))
    {
        //New User instance
        User user = new User();

        //Set all required attributes in any XML element here itself
        if(attributes != null &amp;&amp; attributes.getLength() == 1)
        {
            user.setId(Integer.parseInt(attributes.getValue(0)));
        }
        this.objectStack.push(user);
    }
}

public void endElement(String uri, String localName, String qName) throws SAXException
{
    //Remove last added  element
    this.elementStack.pop();

    //User instance has been constructed so pop it from object stack and push in userList
    if ("user".equals(qName))
    {
        User object = this.objectStack.pop();
        this.userList.add(object);
    }
}

/**
 * This will be called everytime parser encounter a value node
 * */
public void characters(char[] ch, int start, int length) throws SAXException
{
    String value = new String(ch, start, length).trim();

    if (value.length() == 0)
    {
        return; // ignore white space
    }

    //handle the value based on to which element it belongs
    if ("firstName".equals(currentElement()))
    {
        User user = (User) this.objectStack.peek();
        user.setFirstName(value);
    }
    else if ("lastName".equals(currentElement()))
    {
        User user = (User) this.objectStack.peek();
        user.setLastName(value);
    }
}

/**
 * Utility method for getting the current element in processing
 * */
private String currentElement()
{
    return this.elementStack.peek();
}

//Accessor for userList object
public ArrayList getUsers()
{
    return userList;
}
}
<?xml version="1.0" encoding="utf-8"?> 
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" ...">     
<title type="text">newest questions tagged android - Stack Overflow</title>
...
    <entry>
    ...
    </entry>
    <entry>
        <id>http://stackoverflow.com/q/9439999</id>
        <re:rank scheme="http://stackoverflow.com">0</re:rank>
        <title type="text">Where is my data file?</title>
        <category scheme="http://stackoverflow.com/feeds/tag?tagnames=android&sort=newest/tags" term="android"/>
        <category scheme="http://stackoverflow.com/feeds/tag?tagnames=android&sort=newest/tags" term="file"/>
        <author>
            <name>cliff2310</name>
            <uri>http://stackoverflow.com/users/1128925</uri>
        </author>
        <link rel="alternate" href="http://stackoverflow.com/questions/9439999/where-is-my-data-file" />
        <published>2012-02-25T00:30:54Z</published>
        <updated>2012-02-25T00:30:54Z</updated>
        <summary type="html">
            <p>I have an Application that requires a data file...</p>
        </summary>
    </entry>
    <entry>
    ...
    </entry>
...
</feed>