Как разобрать xml с пространством имен с помощью синтаксического анализатора android sax

Мой XML-документ выглядит так:

<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<feed xml:base="http://localhost/someApp" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">
    <entry>
       <id>An ID here</id>
       <content type="application/xml">
           <m:properties>
              <d:Name>The name I want to get</d:Name>
           </m:properties>
       </content>
     </entry>
</feed>

Я могу получить «идентификатор здесь» из тега id с помощью этого кода:

String ATOM_NAMESPACE = "http://www.w3.org/2005/Atom";
RootElement root = new RootElement(ATOM_NAMESPACE, "feed");
Element entry = root.getChild(ATOM_NAMESPACE, "entry");
Element id = entry.getChild(ATOM_NAMESPACE, "id");

id.setEndTextElementListener(new EndTextElementListener(){
    public void end(String body){
        messages.add(body); // messages = ArrayList<String>
    }
});

Однако я не могу получить «имя, которое хочу получить».

Я добавил этот код:

String METADATA_NAMESPACE = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";
String DATASERVICES_NAMESPACE = "http://schemas.microsoft.com/ado/2007/08/dataservices";
Element content = entry.getChild(ATOM_NAMESPACE, "content");
Element properties = content.getChild(METADATA_NAMESPACE, "properties");
Element name = properties.getChild(DATASERVICES_NAMESPACE, "name");
name.setEndTextElementListener(new EndTextElementListener(){
    public void end(String body){
        messages.add(body);
    }
});

но ничего не добавляется в список сообщений.

Что мне нужно сделать, чтобы получить d:Name?


person Darcy    schedule 19.10.2011    source источник
comment
В коде вы использовали "name", а в XML есть тег с локальным именем Name. Может быть, это заглавная буква? XML чувствителен к регистру.   -  person G_H    schedule 19.10.2011


Ответы (1)


Ну, как указал G_H, проблема заключалась в том, что я не использовал заглавные буквы "name"

Это работает:

Element name = properties.getChild(DATASERVICES_NAMESPACE, "Name"); // 'Name' instead of 'name'
name.setEndTextElementListener(new EndTextElementListener(){
    public void end(String body){
        messages.add(body);
    }
});
person Darcy    schedule 20.10.2011