2012-04-12 104 views
5

我想用正確的方式解析自定義android標籤與XmlResourceParser。我使用的是Eclipse插件的Eclipse 3.6,我希望name的一些屬性可以從strings.xml擴展爲完整的字符串。Android自定義XML解析器無法解析android名稱空間

這是在res/xml/文件夾中正在解析的index.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> 

這裏是在res/values/

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

文件strings.xml和解析所述第一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'}'?看起來像這樣會允許該屬性是一個資源或硬編碼的字符串,不是? – 2013-11-24 01:15:29

+0

我需要的名字在我的情況下不爲空。這就是爲什麼。 – 2013-11-25 06:37:57

4

試試這個:

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

不錯的嘗試。它提供了更好的東西:我的變量'name'現在包含字符串'「@ 2131099651」'。不知道爲什麼。 – 2012-04-12 12:28:42

+0

它可能是字符串資源ID。嘗試使用getString(number);方法來獲取字符串。 – skywall 2012-04-12 12:37:27

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

我覺得上面的代碼可以幫助你。