Created
September 9, 2021 16:12
-
-
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).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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