Skip to content

Instantly share code, notes, and snippets.

@ExNDY
Created September 9, 2021 16:12
Show Gist options
  • Save ExNDY/79d1d8d23892d9370f10c9c2bb58026c to your computer and use it in GitHub Desktop.
Save ExNDY/79d1d8d23892d9370f10c9c2bb58026c to your computer and use it in GitHub Desktop.
Xml data parser Stream to ArrayList with integration converter of Windows-1251 to Utf8 (Actual for android platform, for example).
import org.xmlpull.v1.XmlPullParser
import org.xmlpull.v1.XmlPullParserException
import org.xmlpull.v1.XmlPullParserFactory
import java.io.IOException
import java.io.InputStream
import java.math.BigDecimal
import java.nio.charset.Charset
import java.util.ArrayList
class XmlParser {
private val list:ArrayList<T> = ArrayList()
private var obj: Object? = null
private var text: String = ""
fun parseXmlToArrayList(inputStream: InputStream): ArrayList<T> {
val factory = XmlPullParserFactory.newInstance()
factory.isNamespaceAware = false
val parser = factory.newPullParser()
parser?.setInput(inputStream, null)
var event = parser.eventType
try {
while (event != XmlPullParser.END_DOCUMENT) {
when(event){
XmlPullParser.START_TAG -> if (parser.name.equals("%ATTR_NAME%", ignoreCase = true)){
obj = Object()
}
XmlPullParser.TEXT -> text = parser.text
XmlPullParser.END_TAG -> when {
parser.name.equals("%ATTR_NAME%", ignoreCase = true) -> {
obj?.let {
list.add(it)
}
}
parser.name.equals("%ATTR_NAME%", ignoreCase = true) -> {
obj!!.value = Integer.parseInt(text)
}
parser.name.equals("%ATTR_NAME%", ignoreCase = true) -> {
obj!!.textValue = cp1251toUtf8(text)
}
parser.name.equals("Value", ignoreCase = true) -> {
currency!!.value = text.replace(',','.').toBigDecimal()
}
}
}
event = parser.next()
}
} catch (ex: XmlPullParserException) {
} catch (ex: IOException) {
}
return list
}
private fun cp1251toUtf8(text:String): String{
val w1251: Charset = charset("Windows-1251")
val utf8: Charset = charset("utf-8")
return text.toByteArray(w1251).toString(utf8)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment