XmlResourceParserにおける属性値の読み込み

Android SDKXMLリソースを読み込むために使用しているプル・パーサ(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の気が利かないのか。