From 5d33ba3855226c09b326951935e202521bc77cae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Koz=C3=A1k?= Date: Thu, 27 Jul 2017 16:18:56 +0200 Subject: [PATCH] Alternative fix for #41 "" parsed as if it were nothing --- source/std/experimental/xml/cursor.d | 6 +++++- source/std/experimental/xml/domparser.d | 28 ++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) 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); +}