Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>In the past, I've created a nice class to load and handle XML content.</p> <p>Usage for loading from the resources folder : </p> <pre><code>val rootTag=XmlTag.getXmlRootTagOfXmlFileResourceId(context,xmlResId) </code></pre> <p>or, if you have it in a String instance :</p> <pre><code>val rootTag=XmlTag.getXmlFromString(xmlString) </code></pre> <p>here's the code:</p> <pre><code>/** * an xml tag , includes its name, value and attributes * @param tagName the name of the xml tag . for example : &lt;a&gt;b&lt;/a&gt; . the name of the tag is "a" */ class XmlTag(val tagName: String) { /** a hashmap of all of the tag attributes. example: &lt;a c="d" e="f"&gt;b&lt;/a&gt; . attributes: {{"c"="d"},{"e"="f"}} */ @JvmField var tagAttributes: HashMap&lt;String, String&gt;? = null /**list of inner text and xml tags*/ @JvmField var innerTagsAndContent: ArrayList&lt;Any&gt;? = null companion object { @JvmStatic fun getXmlFromString(input: String): XmlTag? { val factory = XmlPullParserFactory.newInstance() factory.isNamespaceAware = true val xpp = factory.newPullParser() xpp.setInput(StringReader(input)) return getXmlRootTagOfXmlPullParser(xpp) } @JvmStatic fun getXmlRootTagOfXmlPullParser(xmlParser: XmlPullParser): XmlTag? { var currentTag: XmlTag? = null var rootTag: XmlTag? = null val tagsStack = Stack&lt;XmlTag&gt;() xmlParser.next() var eventType = xmlParser.eventType var doneParsing = false while (eventType != XmlPullParser.END_DOCUMENT &amp;&amp; !doneParsing) { when (eventType) { XmlPullParser.START_DOCUMENT -&gt; { } XmlPullParser.START_TAG -&gt; { val xmlTagName = xmlParser.name currentTag = XmlTag(xmlTagName) if (tagsStack.isEmpty()) rootTag = currentTag tagsStack.push(currentTag) val numberOfAttributes = xmlParser.attributeCount if (numberOfAttributes &gt; 0) { val attributes = HashMap&lt;String, String&gt;(numberOfAttributes) for (i in 0 until numberOfAttributes) { val attrName = xmlParser.getAttributeName(i) val attrValue = xmlParser.getAttributeValue(i) attributes[attrName] = attrValue } currentTag.tagAttributes = attributes } } XmlPullParser.END_TAG -&gt; { currentTag = tagsStack.pop() if (!tagsStack.isEmpty()) { val parentTag = tagsStack.peek() parentTag.addInnerXmlTag(currentTag) currentTag = parentTag } else doneParsing = true } XmlPullParser.TEXT -&gt; { val innerText = xmlParser.text if (currentTag != null) currentTag.addInnerText(innerText) } } eventType = xmlParser.next() } return rootTag } /**returns the root xml tag of the given xml resourceId , or null if not succeeded . */ fun getXmlRootTagOfXmlFileResourceId(context: Context, xmlFileResourceId: Int): XmlTag? { val res = context.resources val xmlParser = res.getXml(xmlFileResourceId) return getXmlRootTagOfXmlPullParser(xmlParser) } } private fun addInnerXmlTag(tag: XmlTag) { if (innerTagsAndContent == null) innerTagsAndContent = ArrayList() innerTagsAndContent!!.add(tag) } private fun addInnerText(str: String) { if (innerTagsAndContent == null) innerTagsAndContent = ArrayList() innerTagsAndContent!!.add(str) } /**formats the xmlTag back to its string format,including its inner tags */ override fun toString(): String { val sb = StringBuilder() sb.append("&lt;").append(tagName) val numberOfAttributes = if (tagAttributes != null) tagAttributes!!.size else 0 if (numberOfAttributes != 0) for ((key, value) in tagAttributes!!) sb.append(" ").append(key).append("=\"").append(value).append("\"") val numberOfInnerContent = if (innerTagsAndContent != null) innerTagsAndContent!!.size else 0 if (numberOfInnerContent == 0) sb.append("/&gt;") else { sb.append("&gt;") for (innerItem in innerTagsAndContent!!) sb.append(innerItem.toString()) sb.append("&lt;/").append(tagName).append("&gt;") } return sb.toString() } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload