Android:如何在 SAX 解析器中解析相同的标签?

标签 android web-services parsing xml-parsing saxparser

我正在尝试解析网络服务并从中获取值。问题是 Web 服务具有相同的元素名称标签,这会造成解析问题,因为我想获取它们的值,但它们具有相同的名称,因此我很难将它们称为本地名称。

 <countryBean>
        <id>236</id>
        <name>United State</name>
    </countryBean>
    <secutiryQuestion1>
        <id>2</id>
        <question>What was your dream job as a child?</question>
    </secutiryQuestion1>
    <secutiryQuestion2>
        <id>4</id>
        <question>What is the name, breed, and color of your pet?</question>
    </secutiryQuestion2>
    <stateBean>
        <country>236</country>
        <id>5</id>
        <name>California</name>
    </stateBean>
    <statusBean>
        <id>1</id>
        <name>Active</name>
    </statusBean>

我想在不同的变量中获取 ID 标签和其他相邻标签(如名称、问题)的值。这里有 5 个 Id 标签。

我的类(class)代码是这样的

public class XmlParser extends DefaultHandler {

        public RestfullResponse tempResponse = null;
        String currentValue = null;
        int ServiceType =0;

        @Override
        public void startElement(String uri, String localName, String qName,
                Attributes attributes) throws SAXException {
            if(localName.equalsIgnoreCase("countryBean")){
                tempResponse=new RestfullResponse();

                }           

        }


        /* (non-Javadoc)
         * @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String, java.lang.String, java.lang.String)
         */
        @Override
        public void endElement(String uri, String localName, String qName)
                throws SAXException {
            if(ServiceType == 1)
            {
                if(localName.equalsIgnoreCase("id")){
                    tempResponse.setCountryId(currentValue);
                }
                if(localName.equalsIgnoreCase("name")){
                    tempResponse.setCountryName(currentValue);
                }

                if(localName.equalsIgnoreCase("id")){
                    tempResponse.setStateId(currentValue);
                }
                if(localName.equalsIgnoreCase("question")){
                    tempResponse.setstateBean(currentValue);
                }

                if(localName.equalsIgnoreCase("Id")){
                    tempResponse.setStatusId(currentValue);
                }
                if(localName.equalsIgnoreCase("requestSuccess")){
                    tempResponse.setStatus(currentValue);
                }
            }
        }

        @Override
        public void characters(char[] ch, int start, int length)
                throws SAXException {
            currentValue = new String(ch, start, length);
        }

        public RestfullResponse getResponse(){
            return tempResponse;
        }
}

请帮助将它们存储在

String CountryName= "";
String CountryId = "";
String Statename = "";
String StateId ="";
String Status = "";
String StatusId = "";
String Username ="";
String SecurityQuestion = "";
String SecurityQuestionId = "";

最佳答案

添加 bool 变量isCountryBean;

boolean isCountryBean = false , isSecurityQuestion1 = false;

然后在 startElement(....) 中写入:

if(localName.equalsIgnoreCase("countryBean")){
    isCountryBean = true;
    // other stuff
} else if (localName.equalsIgnoreCase("secutiryQuestion1")){
    isSecurityQuestion1 = true;
    isCountryBean = false;
}

在 endElement(...) 中检查:

if(localName.equalsIgnoreCase("id")){
    if(isCountryBean){
        tempResponse.setCountryId(currentValue); 
     }
}
if(localName.equalsIgnoreCase("name")){
    if(isCountryBean){
        isCountryBean = false;
        tempResponse.setCountryName(currentValue);

     }
}

对其他最外向的标签也这样做。希望对您有所帮助。

关于Android:如何在 SAX 解析器中解析相同的标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11362534/

相关文章:

android - ping 超时命令 -W 不适用于 Android

android - 使用手机的唯一设备标识号而不是帐户

android - 蓝牙忘记密码

java - WebSphere 在部署 Web 服务时修改了我的 WSDL (JAX-WS)

web-services - 如何在 REST Web 服务中传递自定义对象

web-services - 用于在 Web 服务和客户端之间同步数据的现代编程标准是什么?

python - Beautiful Soup - 在文章中找到第一个链接

c# - 如何解析 CET/CEST 日期时间?

机器人 : inflated view with a different orientation than the activity

使用类、getline 和 stringstream 进行解析的 C++ 练习