Intereting Posts

Пользовательский XML-парсер Android не разрешает пространство имен android

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

Вот 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"); 

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

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

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

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

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

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

 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 = ""; } 
 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); } 

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