андроид сакс не разбирает "dc: creator"? - PullRequest
2 голосов
/ 13 октября 2011

Надеюсь, кто-то может дать некоторые рекомендации - я использую синтаксический анализатор Android с несколькими каналами. Теперь, когда я хочу проанализировать элемент, который содержит следующее:

<category>category</category>
<dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">creator</dc:creator>
<dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2011-10-13T07:00:15Z</dc:date>
<geo:lat>51.95271682739258</geo:lat>
<geo:long>-0.21096819639205933</geo:long>

Я могу получить значение тега "category", но ничего для остальных.

Используемый код следует примерам из http://www.ibm.com/developerworks/opensource/library/x-android/, в частности фрагмента для анализа тегов:

Element item = channel.getChild("item");

item.getChild("category").setEndTextElementListener(new EndTextElementListener() {
  public void end(String body) {
   Log.e("mydebug","cat>>"+body+"<");
  }
});
item.getChild("dc:creator").setEndTextElementListener(new EndTextElementListener() {
  public void end(String body) {
   Log.e("mydebug","creator>>"+body+"<");
  }
});

генерирует этот вывод:

10-13 14:13:12.763: ERROR/mydebug(609): cat>>category<
10-13 14:13:12.763: ERROR/mydebug(609): cat>>category2<

Я использую следующее:

import android.sax.Element;
import android.sax.EndElementListener;
import android.sax.EndTextElementListener;
import android.sax.RootElement;
import android.util.Log;
import android.util.Xml;

Что-нибудь, что мне не хватает? Единственное, что я могу догадаться, это то, что «:» в теге вызывает у меня проблемы, но я не смог найти примеров подобных проблем.

Большое спасибо за чтение.

Ответы [ 2 ]

4 голосов
/ 13 октября 2011

При использовании методов startElement () и endElement () в вашем DefaultHandler передаются значения как локального, так и квалифицированного имени. Убедитесь, что вы проверяете квалифицированное имя для таких вещей, как 'dc: creator' или же онине будет соответствовать.

См. официальную документацию здесь: http://developer.android.com/reference/org/xml/sax/helpers/DefaultHandler.html#startElement%28java.lang.String,%20java.lang.String,%20java.lang.String,%20org.xml.sax.Attributes%29

Кроме того, вы можете рассмотреть возможность использования XML Pull Parser, поскольку он немного легче, чем SAX, и может быть более подходящимдля ваших нужд: http://developer.android.com/reference/org/xmlpull/v1/XmlPullParserFactory.html

0 голосов
/ 13 октября 2011

Вы используете API, который просматривает только локальное имя элемента: Документация Android

Попробуйте вместо этого:

item.getChild("creator").setEndTextElementListener(new EndTextElementListener() {
  public void end(String body) {
   Log.e("mydebug","creator>>"+body+"<");
  }
});
...