2012-04-12 14 views
5

XmlResourceParserでカスタムアンドロイドタグを解析する正しい方法を知りたいと思います。私はアンドロイドプラグインでEclipse 3.6を使用しています。nameのような属性をstrings.xmlのフルストリングで展開したいとします。AndroidカスタムXMLパーサがアンドロイド名前空間を解決できない

ここに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> 

とXmlResourceParserと第index.xmlを解析するコードフラグメント内のファイルstrings.xmlである:変数namenullが含ま

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

、しかしshortNameには"o_2sq"が含まれています。また、私は成功せず、次のことを試してみました:

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

変数名が"Organize two squares"が含まれますように文を書くの正しい方法は何ですか?私はその問題を克服することが分かっ

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

答えて

1

ベストソリューション:

+1

あなたは 'else {name = s '}'を意味しましたか?そのような属性は、リソースまたはハードコーディングされた文字列のいずれかにすることができますか? –

+0

私の場合、名前がnullでないことが必要でした。これが理由です。 –

4

はこれを試してみてください。

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

ニース。変数 'name'に文字列' "@ 2131099651"が含まれています。理由は分かりません。 –

+0

おそらく文字列リソースIDです。 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); 
} 

私は上記のコードはあなたを助けることができると思います。

関連する問題