diff --git a/libraries/stdlib/src/kotlin/dom/Dom.kt b/libraries/stdlib/src/kotlin/dom/Dom.kt index 4b46e897811..062ec165069 100644 --- a/libraries/stdlib/src/kotlin/dom/Dom.kt +++ b/libraries/stdlib/src/kotlin/dom/Dom.kt @@ -90,6 +90,11 @@ inline fun Element?.childElements(): List { return children().filter{ it.nodeType == Node.ELEMENT_NODE }.map { it as Element } } +/** Returns the child elements of this element with the given name */ +inline fun Element?.childElements(name: String): List { + return children().filter{ it.nodeType == Node.ELEMENT_NODE && it.nodeName == name }.map { it as Element } +} + /** The descendent elements of this document */ val Document?.elements : List get() = this?.getElementsByTagName("*").toElementList() @@ -109,12 +114,12 @@ inline fun Document?.elements(localName: String): List { return this?.getElementsByTagName(localName).toElementList() } -/** Returns all the child elements given the namespace URI and local element name */ +/** Returns all the descendant elements given the namespace URI and local element name */ inline fun Element?.elements(namespaceUri: String, localName: String): List { return this?.getElementsByTagNameNS(namespaceUri, localName).toElementList() } -/** Returns all the elements given the namespace URI and local element name */ +/** Returns all the descendant elements given the namespace URI and local element name */ inline fun Document?.elements(namespaceUri: String, localName: String): List { return this?.getElementsByTagNameNS(namespaceUri, localName).toElementList() } diff --git a/libraries/stdlib/test/dom/DomBuilderTest.kt b/libraries/stdlib/test/dom/DomBuilderTest.kt index aa6681dfc26..b8d73209f0b 100644 --- a/libraries/stdlib/test/dom/DomBuilderTest.kt +++ b/libraries/stdlib/test/dom/DomBuilderTest.kt @@ -117,6 +117,15 @@ class DomBuilderTest() { } else { fail("Not an Element $grandChild") } + val child = doc["child"].first + if (child != null) { + val gc1 = child.childElements("grandChild") + assertEquals(1, gc1.size, "Expected a single child but found $gc1") + val gc2 = child.childElements("grandChild2") + assertEquals(1, gc2.size, "Expected a single child but found $gc2") + } else { + fail("No child found!") + } val children = doc.documentElement.children() val xml = nodesToXmlString(children) println("root element has children: ${xml}")