diff --git a/source/std/experimental/xml/cursor.d b/source/std/experimental/xml/cursor.d index 5c65baf..8e8919b 100644 --- a/source/std/experimental/xml/cursor.d +++ b/source/std/experimental/xml/cursor.d @@ -237,7 +237,11 @@ struct Cursor(P, Flag!"conflateCDATA" conflateCDATA = Yes.conflateCDATA, ErrorHa } else if (currentNode.kind == XMLKind.elementStart) { - return advanceInput() && currentNode.kind != XMLKind.elementEnd; + advanceInput(); + if (currentNode.kind != XMLKind.elementEnd) + return true; + currentNode.kind = XMLKind.elementEmpty; + return false; } else if (currentNode.kind == XMLKind.dtdStart) { diff --git a/source/std/experimental/xml/domparser.d b/source/std/experimental/xml/domparser.d index 69fe53b..efb3d14 100644 --- a/source/std/experimental/xml/domparser.d +++ b/source/std/experimental/xml/domparser.d @@ -260,4 +260,30 @@ unittest assert(doc.getElementsByTagName("ccc").length == 1); assert(doc.documentElement.getAttribute("xmlns:myns") == "something"); -} \ No newline at end of file +} + +unittest +{ + import std.experimental.xml.lexers; + import std.experimental.xml.parser; + import std.experimental.xml.cursor; + import std.experimental.allocator.gc_allocator; + import domimpl = std.experimental.xml.domimpl; + + alias DOMImplType = domimpl.DOMImplementation!string; + + auto xml = ``; + auto builder = + xml + .lexer + .parser + .cursor + .copyingCursor + .domBuilder(new DOMImplType()); + + builder.setSource(xml); + builder.buildRecursive; + auto doc = builder.getDocument; + + assert(doc.childNodes.length == 1); +}