2012-04-12 9 views
5

Vorrei ottenere il modo corretto di analizzare i tag Android personalizzati con un XmlResourceParser. Sto usando Eclipse 3.6 con il plug-in Android, e vorrei che alcuni attributi come lo name fossero espansi con la stringa completa da strings.xml.Il parser XML personalizzato Android non riesce a risolvere lo spazio dei nomi di Android

Questo è il numero index.xml che viene analizzato nella cartella 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> 

Ecco il file strings.xml nella res/values/ cartella

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

e il frammento di codice che analizza il primo index.xml con una XmlResourceParser:

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

La variabile name contiene null, ma shortName contiene "o_2sq". Ho anche provato il seguente senza successo:

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

Qual è il modo corretto di scrivere la frase in modo che il nome della variabile conterrebbe "Organize two squares"?

risposta

1

migliore soluzione che ho trovato per superare questo problema.

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

Intendevi 'else {name = s '}'? Sembra che permetterebbe che quell'attributo sia una risorsa o una stringa hard-coded, no? –

+0

Avevo bisogno del nome per non essere nullo nel mio caso. Ecco perché. –

4

Prova questa:

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

Bel tentativo. Dà qualcosa di meglio: la mia variabile 'name' ora contiene la stringa' "@ 2131099651" '. Non so perché. –

+0

Probabilmente è un ID risorsa stringa. Prova a usare getString (numero); metodo per ottenere una stringa. – 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); 
} 

penso che il codice di cui sopra potrebbe aiutare.

Problemi correlati