Синтаксический анализ Xml возвращает нулевой тег

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

Мой xml

<?xml version="1.0"?>
-
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" >
   -

    <s:Header>

        <Action
            xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none"
            s:mustUnderstand="1" >
                  http://tempuri.org/IUDTServices/ValidateUser

        </Action>
    </s:Header>
         -

    <s:Body>
 -

        <ValidateUser xmlns="http://tempuri.org/" >

            <userName>admin</userName>

            <password>admin</password>
        </ValidateUser>
    </s:Body>

</s:Envelope>

Мой класс активности содержит код синтаксического анализа с классом сущности как UserClass, который содержит параметры имени пользователя и пароля.

Моя активность

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        XmlPullParserFactory pullParserFactory;
        try {
            pullParserFactory = XmlPullParserFactory.newInstance();
            XmlPullParser parser = pullParserFactory.newPullParser();

                InputStream in_s = getApplicationContext().getAssets().open("temp.xml");
                parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
                parser.setInput(in_s, null);

                parseXML(parser);

        } catch (XmlPullParserException e) {

            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }



    }

    private void parseXML(XmlPullParser parser) throws XmlPullParserException,IOException {

        UserClass userClass = null;

        int eventType = parser.getEventType();

        while(eventType!= XmlPullParser.END_DOCUMENT){
            String tagName = null;
            switch(eventType){

            case XmlPullParser.START_DOCUMENT:

                userClass = new UserClass();

            case XmlPullParser.START_TAG:

                tagName = parser.getName();

                if(tagName=="userName"){

                    userClass.setUsername(tagName);
                }

                if(tagName=="password"){

                    userClass.setPassword(tagName);
                }
                break;

            case XmlPullParser.END_DOCUMENT:
                printValues(userClass);
                break;

            }
        }

    }

    private void printValues(UserClass userClass) {

        System.out.println(userClass.getUsername()+"   "+userClass.getPassword());

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

Я всегда получаю имя тега как нулевое. Не могу найти причину этого. Помогите, пожалуйста...


person user1901079    schedule 23.08.2013    source источник
comment
Используйте .equals для сравнения строк вместо ==   -  person Raghunandan    schedule 23.08.2013
comment
мой тип события = parser.getEventType возвращает 0..   -  person user1901079    schedule 23.08.2013


Ответы (1)


этот код работает для меня .. подходит в соответствии с вашими потребностями

Изменить: для разбора из итернета:

 URL url = new URL("http://api.discogs.com/artist/ac/dc");
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(new InputSource(url.openStream()));
            doc.getDocumentElement().normalize();
            XPathFactory xPathfactory = XPathFactory.newInstance();
        XPath xpath = xPathfactory.newXPath();

парсер дом

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("D:/workspace1/dd.xml");
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
//XPathExpression expr = xpath.compile("//resp/artist/images/image[@uri]");
XPathExpression expr = xpath.compile("//resp/artist/images/uri");
NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);

for (int zzz = 0; zzz < nl.getLength(); zzz++)
{
    Node currentItem = nl.item(zzz);
    //String key = currentItem.getAttributes().getNamedItem("uri").getNodeValue();
    String key = currentItem.getTextContent();
    System.out.println(key);
}
person Ankit Srivastava    schedule 23.08.2013
comment
это мы используем dom parse, если я прав. однако оператор использует синтаксический анализатор xml. порекомендуйте XmlPullParser, который является эффективным и удобным способом анализа XML для Android разработчика .android.com/training/basics/network-ops/xml.html - person Raghunandan; 23.08.2013
comment
хорошо, спасибо за то, что сказал мне это, я буду иметь это в виду ... вы знаете, как я могу использовать приведенный выше (мой код) для анализа информации из URL-адреса? Должен ли приведенный выше код делать? (я отредактировал код) - person Ankit Srivastava; 23.08.2013
comment
если у вас есть сомнения, задайте новый вопрос - person Raghunandan; 23.08.2013
comment
почему здесь нельзя ответить? - person Ankit Srivastava; 23.08.2013
comment
кстати вот вопрос stackoverflow.com/questions/18384326/ - person Ankit Srivastava; 23.08.2013
comment
почему я должен? если это не относится к посту. также, если вы сомневаетесь, это то же самое, что и ops, подождите, пока кто-нибудь даст ответ здесь. новое сомнение задать новый вопрос - person Raghunandan; 23.08.2013
comment
я дал ссылку в комментарии выше - person Ankit Srivastava; 23.08.2013
comment
да, когда я пытаюсь разобрать файл из Интернета, он не работает - person Ankit Srivastava; 23.08.2013
comment
@ user1901079 ты пробовал использовать .equals ? - person Raghunandan; 24.08.2013