diff options
Diffstat (limited to 'ebics/src/main/kotlin/XmlCombinators.kt')
-rw-r--r-- | ebics/src/main/kotlin/XmlCombinators.kt | 23 |
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) |