summaryrefslogtreecommitdiff
path: root/ebics/src/main/kotlin/XmlCombinators.kt
diff options
context:
space:
mode:
Diffstat (limited to 'ebics/src/main/kotlin/XmlCombinators.kt')
-rw-r--r--ebics/src/main/kotlin/XmlCombinators.kt23
1 files changed, 16 insertions, 7 deletions
diff --git a/ebics/src/main/kotlin/XmlCombinators.kt b/ebics/src/main/kotlin/XmlCombinators.kt
index 9cb0b327..902e21ae 100644
--- a/ebics/src/main/kotlin/XmlCombinators.kt
+++ b/ebics/src/main/kotlin/XmlCombinators.kt
@@ -183,13 +183,22 @@ class XmlDestructor internal constructor(private val el: Element) {
inline fun <reified T : Enum<T>> enum(): T = java.lang.Enum.valueOf(T::class.java, text())
fun attr(index: String): String = el.getAttribute(index)
-}
-fun <T> destructXml(xml: InputStream, root: String, f: XmlDestructor.() -> T): T {
- val doc = XMLUtil.parseIntoDom(xml)
- if (doc.documentElement.tagName != root) {
- throw DestructionError("expected root '$root' got '${doc.documentElement.tagName}'")
+ companion object {
+ fun <T> fromStream(xml: InputStream, root: String, f: XmlDestructor.() -> T): T {
+ val doc = XMLUtil.parseIntoDom(xml)
+ return fromDoc(doc, root, f)
+ }
+
+ fun <T> fromDoc(doc: Document, root: String, f: XmlDestructor.() -> T): T {
+ if (doc.documentElement.tagName != root) {
+ throw DestructionError("expected root '$root' got '${doc.documentElement.tagName}'")
+ }
+ val destr = XmlDestructor(doc.documentElement)
+ return f(destr)
+ }
}
- val destr = XmlDestructor(doc.documentElement)
- return f(destr)
}
+
+fun <T> destructXml(xml: InputStream, root: String, f: XmlDestructor.() -> T): T
+ = XmlDestructor.fromStream(xml, root, f)