2012-04-12 3 views
5

Я хотел бы получить правильный способ разбора пользовательских тегов Android с помощью XmlResourceParser. Я использую Eclipse 3.6 с подключаемым модулем android, и я хотел бы, чтобы некоторые атрибуты, такие как name, были расширены с полной строкой от strings.xml.Пользовательский XML-парсер Android не разрешает пространство имен android

Адрес index.xml, который обрабатывается в папке res/xml/.

<?xml version="1.0" encoding="utf-8"?> 
<Index xmlns:android="http://schemas.android.com/apk/res/android"> 
<Sheet 
    shortName="o_2sq" 
    android:name="@string/o_2sq" 
    instructions="" 
/> 
</Index> 

Вот файл strings.xml в res/values/ папке

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<string name="o_2sq">Organize two squares</string> 
</resources> 

и фрагмент кода, который разбирает первый index.xml с XmlResourceParser:

String name = xpp.getAttributeValue(null, "android:name"); 
String shortName = xpp.getAttributeValue(null, "shortName"); 

Переменная name содержит null, но shortName содержит "o_2sq". Я также попытался следующие без успеха:

String name = xpp.getAttributeValue("android", "name"); 

Что такое правильный способ написания предложение так, что имя переменной будет содержать "Organize two squares"?

ответ

1

Лучшее решение, которое я нашел, чтобы преодолеть эту проблему.

String s = xpp.getAttributeValue("http://schemas.android.com/apk/res/android", "name"); 
String name = null; 
if(s != null && s.length() > 1 && s.charAt(0) == '@') { 
    int id = Integer.parseInt(s.substring(1)); 
    name = getString(id); 
} else { 
    name = ""; 
} 
+1

Вы имели в виду 'else {name = s '}'? Похоже, что этот атрибут может быть либо ресурсом, либо жестко запрограммированной строкой, нет? –

+0

Мне было нужно, чтобы в моем случае не было нулевого имени. Вот почему. –

4

Попробуйте это:

String name = xpp.getAttributeValue("http://schemas.android.com/apk/res/android", "name"); 
+1

Nice попробовать. Это дает что-то лучшее: моя переменная 'name' теперь содержит строку' '@ 2131099651" '. Не знаю, почему. –

+0

Вероятно, это идентификатор ресурса строки. Попробуйте использовать getString (число); метод для получения строки. – skywall

1
final String NAMESPACE_ANDROID = "http://schemas.android.com/apk/res/android"; 
final int VALUE_NOT_SET = -1; 
int resId = parser.getAttributeResourceValue(NAMESPACE_ANDROID, "name", VALUE_NOT_SET); 
String value = null; 
if (VALUE_NOT_SET != resId) { 
    value = context.getString(resId); 
} 

Я думаю, что приведенный выше код может помочь вам.

 Смежные вопросы

  • Нет связанных вопросов^_^