Skip to content

Instantly share code, notes, and snippets.

@B3nedikt
Created October 4, 2019 06:23
Show Gist options
  • Save B3nedikt/6158df5c4e4d0e4ddabc904fc31ae182 to your computer and use it in GitHub Desktop.
Save B3nedikt/6158df5c4e4d0e4ddabc904fc31ae182 to your computer and use it in GitHub Desktop.
Parse Android String XML
internal fun parseStringsXmlFile(stringsXmlFile: File): HashMap<String, String> {
stringsXmlFile.inputStream().use { inputStream ->
val parser: XmlPullParser = Xml.newPullParser().apply {
setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false)
setInput(inputStream, null)
nextTag()
}
return readStrings(parser)
}
}
private fun readStrings(parser: XmlPullParser): HashMap<String, String> {
val strings = hashMapOf<String, String>()
parser.require(XmlPullParser.START_TAG, null, RESOURCES_ATTRIBUTE_NAME)
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.eventType != XmlPullParser.START_TAG) {
continue
}
if (parser.name == EVENT_NAME) {
val stringName = parser.getAttributeValue(null, STRING_NAME_ATTRIBUTE_NAME)
if (parser.next() == XmlPullParser.TEXT) {
val stringValue = parser.text.removeSurrounding(QUOTATION_MARKS)
parser.nextTag()
strings[stringName] = stringValue
}
}
}
return strings
}
private const val EVENT_NAME = "string"
private const val RESOURCES_ATTRIBUTE_NAME = "resources"
private const val STRING_NAME_ATTRIBUTE_NAME = "name"
private const val QUOTATION_MARKS = "\""
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment