XmlResourceParserにおける属性値の読み込み
Android SDKでXMLリソースを読み込むために使用しているプル・パーサ(XmlResourceParser)だが、XML属性の読み込み結果が予想と違い困惑している。
<constraint value="[\u0000-\u001F\u007F]"/>
このように記述されているXML要素を読込む際、属性valueの値をダンプした結果だが
- XMLStreamReader(Java6 StAX)
これは期待通り。
ソースコードを追ってみる。
android.content.res.XmlResourceParser#getAttributeValue ↓ android.content.res.XmlBlock#getAttributeValue ↓ android.content.res.StringBlock#get
ここまで見て、XmlResourceParserは要素を文字列をStringBlockの配列に全て格納しているのが解ったが、その時点で既に上記の値になっているようだ。
追記
調べてみるとXmlResourceParserでは属性値をJava文字列として扱うらしく、"\"はエスケープシーケンスの開始として処理されているようだ。(結果として上手く処理されていないが)
とりあえず以下のように記述すればStAXと同様の結果になる。
<constraint value="[\\u0000-\\u001F\\u007F]"/>
XMLStreamReaderが気を利かしているのか、XmlResourceParserの気が利かないのか。