diff --git a/README.rst b/README.rst
index ea22cdcfddf032a17926d6cccc8560e36d7979ea..e692f4dc4a99d4cd10c8241d87b17bfc1d8203f7 100644
--- a/README.rst
+++ b/README.rst
@@ -141,6 +141,16 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 Change history
 --------------
 
+Version 2.29.23 (08/16/2018)
+
+- Added new command line option "--create-mandatory-children".  If a
+  child is defined with minOccurs="1" and maxOccurs="1" and the
+  child is xs:complexType and the child is not defined with
+  xs:simpleContent, then in the element's constructor generate code
+  that automatically creates an instance of the child.  Thanks to
+  Vincent Helfre for analyzing this issue and providing guidance
+  toward a solution.
+
 Version 2.29.22 (08/03/2018)
 
 - Fixed exception that occurs when (1) an xs:complexType is defined
diff --git a/generateDS.html b/generateDS.html
index ae3ed4795f72884b4c1574396ebfa15a7bf0ab26..6dda5e420b568fd96fcffa89bd7366f85d01c301 100644
--- a/generateDS.html
+++ b/generateDS.html
@@ -220,7 +220,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.22</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.23</td>
 </tr>
 </tbody>
 </table>
@@ -229,7 +229,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">date:</th><td class="field-body">August 03, 2018</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">August 16, 2018</td>
 </tr>
 </tbody>
 </table>
@@ -661,6 +661,14 @@ Options:
                              Default: &quot;[('[-:.]', '_')]&quot;
     --mixed-case-enums       If used, do not uppercase simpleType enums names.
                              Default is to make enum names uppercase.
+    --create-mandatory-children
+                             If a child is defined with minOccurs=&quot;1&quot; and
+                             maxOccurs=&quot;1&quot; and the child is xs:complexType
+                             and the child is not defined with
+                             xs:simpleContent, then in the element's
+                             constructor generate code that automatically
+                             creates an instance of the child.  The default
+                             is False, i.e. do not automatically create child.
     -q, --no-questions       Do not ask questions, for example,
                              force overwrite.
     --no-warnings            Do not print warning messages.
@@ -979,6 +987,15 @@ characters.  Example:
 <dd>Do not uppercase the names of simpleType enums.  The default (if
 this option is omitted) is to make generated enum names
 uppercase.</dd>
+<dt>create-mandatory-children</dt>
+<dd>If a child is defined with minOccurs=&quot;1&quot; and maxOccurs=&quot;1&quot; and
+the child is xs:complexType and the child is not defined with
+xs:simpleContent, then in the element's constructor generate
+code that automatically creates an instance of the child.  The
+default is False, i.e. do not automatically create the child.
+Note that if a value for the child's parameter is passed to the
+constructor (which overrides the default value of None), then
+the constructor will not create an instance.</dd>
 <dt>q, no-questions</dt>
 <dd>Do not ask questions.  For example, if the &quot;-f&quot; command line
 option is omitted and the ouput file exists, then generateDS.py
@@ -3392,7 +3409,7 @@ following among others:</p>
 <div class="footer">
 <hr class="footer" />
 <a class="reference external" href="generateDS.txt">View document source</a>.
-Generated on: 2018-08-03 21:41 UTC.
+Generated on: 2018-08-16 22:29 UTC.
 Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
 
 </div>
diff --git a/generateDS.py b/generateDS.py
index b74ac86616de293714e0ca27524730c99925f410..0f475485824ef99cec2e11a80f6ed1af64b78350 100755
--- a/generateDS.py
+++ b/generateDS.py
@@ -126,6 +126,14 @@ Options:
                              Default: "[('[-:.]', '_')]"
     --mixed-case-enums       If used, do not uppercase simpleType enums names.
                              Default is to make enum names uppercase.
+    --create-mandatory-children
+                             If a child is defined with minOccurs="1" and
+                             maxOccurs="1" and the child is xs:complexType
+                             and the child is not defined with
+                             xs:simpleContent, then in the element's
+                             constructor generate code that automatically
+                             creates an instance of the child.  The default
+                             is False, i.e. do not automatically create child.
     -q, --no-questions       Do not ask questions, for example,
                              force overwrite.
     --no-warnings            Do not print warning messages.
@@ -227,7 +235,7 @@ _log = logging.getLogger(__name__)
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.29.22'
+VERSION = '2.29.23'
 ##VERSION##
 
 BaseStrTypes = six.string_types
@@ -253,6 +261,7 @@ NoQuestions = False
 NoDates = False
 NoVersion = False
 AlwaysExportDefault = False
+CreateMandatoryChildren = False
 Dirpath = []
 ExternalEncoding = ''
 Namespacedef = ''
@@ -3707,7 +3716,8 @@ def generateBuildStandard_1(
             childType == NonPositiveIntegerType or
             childType == NegativeIntegerType or
             childType == NonNegativeIntegerType):
-        wrt("        %s nodeName_ == '%s':\n" % (keyword, origName, ))
+        wrt("        %s nodeName_ == '%s' and child_.text:\n" % (
+            keyword, origName, ))
         wrt("            sval_ = child_.text\n")
         wrt("            try:\n")
         wrt("                ival_ = int(sval_)\n")
@@ -3756,7 +3766,8 @@ def generateBuildStandard_1(
     elif (childType == FloatType or
             childType == DoubleType or
             childType == DecimalType):
-        wrt("        %s nodeName_ == '%s':\n" % (keyword, origName, ))
+        wrt("        %s nodeName_ == '%s' and child_.text:\n" % (
+            keyword, origName, ))
         wrt("            sval_ = child_.text\n")
         wrt("            try:\n")
         wrt("                fval_ = float(sval_)\n")
@@ -4239,6 +4250,11 @@ def generateCtor(wrt, prefix, element):
         _log.debug("Constructor child: %s" % name)
         _log.debug("Dump: %s" % child.__dict__)
         childType = child.getType()
+        childTypeDef = ElementDict.get(childType)
+        if childTypeDef is not None:
+            childSimpleContent = childTypeDef.getSimpleContent()
+        else:
+            childSimpleContent = False
         if childType == AnyTypeIdentifier:
             if child.getMaxOccurs() > 1:
                 wrt('        if anytypeobjs_ is None:\n')
@@ -4283,6 +4299,18 @@ def generateCtor(wrt, prefix, element):
                 wrt('            self.%s = []\n' % (name, ))
                 wrt('        else:\n')
                 wrt('            self.%s = %s\n' % (name, mbrname))
+            elif (CreateMandatoryChildren and
+                  child.getMinOccurs() == 1 and
+                  child.getMaxOccurs() == 1 and
+                  child.isComplex() and
+                  not childSimpleContent):
+                wrt('        if %s is None:\n' % (mbrname, ))
+                className = child.getType()
+                className = cleanupName(className)
+                wrt('            self.%s = globals()["%s"]()\n' % (
+                    name, className, ))
+                wrt('        else:\n')
+                wrt('            self.%s = %s\n' % (name, mbrname))
             else:
                 typeObj = ElementDict.get(child.getType())
                 if (child.getDefault() and
@@ -7266,7 +7294,7 @@ def main():
         UseGeneratedssuperLookup, UseSourceFileAsModuleName, \
         PreserveCdataTags, CleanupNameList, \
         NoWarnings, AlwaysExportDefault, \
-        UppercaseEnums
+        UppercaseEnums, CreateMandatoryChildren
     outputText = True
     args = sys.argv[1:]
     try:
@@ -7289,6 +7317,7 @@ def main():
                 'no-warnings',
                 'no-collect-includes', 'no-redefine-groups',
                 'always-export-default', 'mixed-case-enums',
+                'create-mandatory-children',
             ])
     except getopt.GetoptError:
         usage()
@@ -7312,6 +7341,7 @@ def main():
     noCollectIncludes = False
     noRedefineGroups = False
     UppercaseEnums = True
+    CreateMandatoryChildren = False
     for option in options:
         if option[0] == '--session':
             sessionFilename = option[1]
@@ -7496,6 +7526,8 @@ def main():
             AlwaysExportDefault = True
         elif option[0] == '--mixed-case-enums':
             UppercaseEnums = False
+        elif option[0] == '--create-mandatory-children':
+            CreateMandatoryChildren = True
     if showVersion:
         print('generateDS.py version %s' % VERSION)
         sys.exit(0)
diff --git a/generateDS.txt b/generateDS.txt
index 7df9aaf1e662c54e94e57e11d9800eab187fb913..df257a6acd8bb926dddaa4855b1c41d72cfbb8cd 100644
--- a/generateDS.txt
+++ b/generateDS.txt
@@ -12,7 +12,7 @@ generateDS -- Generate Data Structures from XML Schema
 
 .. version
 
-:revision: 2.29.22
+:revision: 2.29.23
 
 .. version
 
@@ -348,6 +348,14 @@ Here is the usage message displayed by ``generateDS.py``::
                                  Default: "[('[-:.]', '_')]"
         --mixed-case-enums       If used, do not uppercase simpleType enums names.
                                  Default is to make enum names uppercase.
+        --create-mandatory-children
+                                 If a child is defined with minOccurs="1" and
+                                 maxOccurs="1" and the child is xs:complexType
+                                 and the child is not defined with
+                                 xs:simpleContent, then in the element's
+                                 constructor generate code that automatically
+                                 creates an instance of the child.  The default
+                                 is False, i.e. do not automatically create child.
         -q, --no-questions       Do not ask questions, for example,
                                  force overwrite.
         --no-warnings            Do not print warning messages.
@@ -701,6 +709,16 @@ mixed-case-enums
     this option is omitted) is to make generated enum names
     uppercase.
 
+create-mandatory-children
+    If a child is defined with minOccurs="1" and maxOccurs="1" and
+    the child is xs:complexType and the child is not defined with
+    xs:simpleContent, then in the element's constructor generate
+    code that automatically creates an instance of the child.  The
+    default is False, i.e. do not automatically create the child.
+    Note that if a value for the child's parameter is passed to the
+    constructor (which overrides the default value of None), then
+    the constructor will not create an instance.
+
 q, no-questions
     Do not ask questions.  For example, if the "-f" command line
     option is omitted and the ouput file exists, then generateDS.py
diff --git a/generateds_gui_notes.html b/generateds_gui_notes.html
index 1ef344490b508caa495c23c857deb5e416a8b173..4749cd33462f0576b607d3e4bfa325b577f81249 100644
--- a/generateds_gui_notes.html
+++ b/generateds_gui_notes.html
@@ -220,7 +220,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.22</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.23</td>
 </tr>
 </tbody>
 </table>
@@ -229,7 +229,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">date:</th><td class="field-body">August 03, 2018</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">August 16, 2018</td>
 </tr>
 </tbody>
 </table>
@@ -401,7 +401,7 @@ $ mv generateds_gui.mo locale/ru/LC_MESSAGES/
 <div class="footer">
 <hr class="footer" />
 <a class="reference external" href="generateds_gui_notes.txt">View document source</a>.
-Generated on: 2018-08-03 21:41 UTC.
+Generated on: 2018-08-16 22:29 UTC.
 Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
 
 </div>
diff --git a/generateds_gui_notes.txt b/generateds_gui_notes.txt
index 5cf503ea9b8ecd5f2ec28fcfc82f5d4789004f6c..2bed9231a7cc749dc9c2ea2f42426c7db52b7675 100644
--- a/generateds_gui_notes.txt
+++ b/generateds_gui_notes.txt
@@ -12,7 +12,7 @@ GenerateDS GUI Notes
 
 .. version
 
-:revision: 2.29.22
+:revision: 2.29.23
 
 .. version
 
diff --git a/gui/generateds_gui.py b/gui/generateds_gui.py
index 2abb8e5ce40a93b5077d4d7a7fb1269be595b3cb..c0c1d36def19802c8ce85bd9567c2a1cdf55abdf 100644
--- a/gui/generateds_gui.py
+++ b/gui/generateds_gui.py
@@ -41,7 +41,7 @@ from libgenerateDS.gui import generateds_gui_session
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.29.22'
+VERSION = '2.29.23'
 ##VERSION##
 
 
diff --git a/librarytemplate_howto.html b/librarytemplate_howto.html
index 6f7d1f0858b03aa5405de80a3d34a906f1c32734..7049ae9f4320acaaa1e9e91b70109a7ff9faf8ac 100644
--- a/librarytemplate_howto.html
+++ b/librarytemplate_howto.html
@@ -217,7 +217,7 @@ dkuhlman (at) davekuhlman (dot) org
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.22</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.23</td>
 </tr>
 </tbody>
 </table>
@@ -226,7 +226,7 @@ dkuhlman (at) davekuhlman (dot) org
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">date:</th><td class="field-body">August 03, 2018</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">August 16, 2018</td>
 </tr>
 </tbody>
 </table>
@@ -380,7 +380,7 @@ this command for your needs.  For example, you may need to use
 <div class="footer">
 <hr class="footer" />
 <a class="reference external" href="librarytemplate_howto.txt">View document source</a>.
-Generated on: 2018-08-03 21:41 UTC.
+Generated on: 2018-08-16 22:29 UTC.
 Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
 
 </div>
diff --git a/librarytemplate_howto.txt b/librarytemplate_howto.txt
index 7b6984337e8a9c7cd443a9ed562fa1d94637e63d..971c8fd74349590b3f4cf2a9b4a7a1eee0f28f24 100644
--- a/librarytemplate_howto.txt
+++ b/librarytemplate_howto.txt
@@ -8,7 +8,7 @@ How to package a generateDS.py generated library
 
 .. version
 
-:revision: 2.29.22
+:revision: 2.29.23
 
 .. version
 
diff --git a/process_includes.py b/process_includes.py
index 1c451f1c5ab9b93b4605ed7d543cf95d8370194b..f083e639f08cecf0ea09e8c3a738e3da4280afd6 100755
--- a/process_includes.py
+++ b/process_includes.py
@@ -40,7 +40,7 @@ except ImportError:
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.29.22'
+VERSION = '2.29.23'
 ##VERSION##
 
 CatalogDict = {}
diff --git a/setup.py b/setup.py
index 3feac89da2b96a3676ac7f30acb8a16a295ba342..834c8f3b8515f6093596081b36d4234861512709 100644
--- a/setup.py
+++ b/setup.py
@@ -8,7 +8,7 @@ setup(
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-    version="2.29.22",
+    version="2.29.23",
 ##VERSION##
     author="Dave Kuhlman",
     author_email="dkuhlman@davekuhlman.org",
diff --git a/tests/annotations1_sup.py b/tests/annotations1_sup.py
index bd590ce7480b15cd614eb7e7b482f64bb66dcf9c..0d81841ec1a2b942d6b3adc60f316669ebee1bc5 100644
--- a/tests/annotations1_sup.py
+++ b/tests/annotations1_sup.py
@@ -912,7 +912,7 @@ class document2Type(GeneratedsSuper):
             comments_ = child_.text
             comments_ = self.gds_validate_string(comments_, node, 'comments')
             self.comments = comments_
-        elif nodeName_ == 'rating':
+        elif nodeName_ == 'rating' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1011,7 +1011,7 @@ class document3Type(GeneratedsSuper):
             comments_ = child_.text
             comments_ = self.gds_validate_string(comments_, node, 'comments')
             self.comments = comments_
-        elif nodeName_ == 'rating':
+        elif nodeName_ == 'rating' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
diff --git a/tests/anywildcard1_sup.py b/tests/anywildcard1_sup.py
index f8186dd65426318e445b0589a64213f6ed40c47a..1965ae0ad13eb7858f2ccb1516f38729ed1a408c 100644
--- a/tests/anywildcard1_sup.py
+++ b/tests/anywildcard1_sup.py
@@ -1106,7 +1106,7 @@ class CatalogType(GeneratedsSuper):
             name_ = child_.text
             name_ = self.gds_validate_string(name_, node, 'name')
             self.name = name_
-        elif nodeName_ == 'catagory':
+        elif nodeName_ == 'catagory' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
diff --git a/tests/defaults_cases1_sup.py b/tests/defaults_cases1_sup.py
index 320918040a3aa1e6b116785613932529e4140103..45383327c3ae7e72516f3216b8b7cf08d36f9926 100644
--- a/tests/defaults_cases1_sup.py
+++ b/tests/defaults_cases1_sup.py
@@ -990,7 +990,7 @@ class DefaultType1(GeneratedsSuper):
     def buildAttributes(self, node, attrs, already_processed):
         pass
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
-        if nodeName_ == 'normal01':
+        if nodeName_ == 'normal01' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1002,7 +1002,7 @@ class DefaultType1(GeneratedsSuper):
             normal02_ = child_.text
             normal02_ = self.gds_validate_string(normal02_, node, 'normal02')
             self.normal02 = normal02_
-        elif nodeName_ == 'default01':
+        elif nodeName_ == 'default01' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1014,7 +1014,7 @@ class DefaultType1(GeneratedsSuper):
             default02_ = child_.text
             default02_ = self.gds_validate_string(default02_, node, 'default02')
             self.default02 = default02_
-        elif nodeName_ == 'normal03':
+        elif nodeName_ == 'normal03' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1022,7 +1022,7 @@ class DefaultType1(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'normal03')
             self.normal03 = fval_
-        elif nodeName_ == 'normal04':
+        elif nodeName_ == 'normal04' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1030,7 +1030,7 @@ class DefaultType1(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'normal04')
             self.normal04 = fval_
-        elif nodeName_ == 'default03':
+        elif nodeName_ == 'default03' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1038,7 +1038,7 @@ class DefaultType1(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'default03')
             self.default03 = fval_
-        elif nodeName_ == 'default04':
+        elif nodeName_ == 'default04' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1286,7 +1286,7 @@ class FixedType1(GeneratedsSuper):
     def buildAttributes(self, node, attrs, already_processed):
         pass
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
-        if nodeName_ == 'normal01':
+        if nodeName_ == 'normal01' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1298,7 +1298,7 @@ class FixedType1(GeneratedsSuper):
             normal02_ = child_.text
             normal02_ = self.gds_validate_string(normal02_, node, 'normal02')
             self.normal02 = normal02_
-        elif nodeName_ == 'fixed01':
+        elif nodeName_ == 'fixed01' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1310,7 +1310,7 @@ class FixedType1(GeneratedsSuper):
             fixed02_ = child_.text
             fixed02_ = self.gds_validate_string(fixed02_, node, 'fixed02')
             self.fixed02 = fixed02_
-        elif nodeName_ == 'normal03':
+        elif nodeName_ == 'normal03' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1318,7 +1318,7 @@ class FixedType1(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'normal03')
             self.normal03 = fval_
-        elif nodeName_ == 'normal04':
+        elif nodeName_ == 'normal04' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1326,7 +1326,7 @@ class FixedType1(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'normal04')
             self.normal04 = fval_
-        elif nodeName_ == 'fixed03':
+        elif nodeName_ == 'fixed03' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1334,7 +1334,7 @@ class FixedType1(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'fixed03')
             self.fixed03 = fval_
-        elif nodeName_ == 'fixed04':
+        elif nodeName_ == 'fixed04' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
diff --git a/tests/defaults_cases_always1_sup.py b/tests/defaults_cases_always1_sup.py
index c4a28c0bd8f40e4f5e0962e7ad71e4c1caa2196b..fc155a581b7bbdabb1b2e549b548aa003c7f4ef9 100644
--- a/tests/defaults_cases_always1_sup.py
+++ b/tests/defaults_cases_always1_sup.py
@@ -955,7 +955,7 @@ class DefaultType1(GeneratedsSuper):
     def buildAttributes(self, node, attrs, already_processed):
         pass
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
-        if nodeName_ == 'normal01':
+        if nodeName_ == 'normal01' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -967,7 +967,7 @@ class DefaultType1(GeneratedsSuper):
             normal02_ = child_.text
             normal02_ = self.gds_validate_string(normal02_, node, 'normal02')
             self.normal02 = normal02_
-        elif nodeName_ == 'default01':
+        elif nodeName_ == 'default01' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -979,7 +979,7 @@ class DefaultType1(GeneratedsSuper):
             default02_ = child_.text
             default02_ = self.gds_validate_string(default02_, node, 'default02')
             self.default02 = default02_
-        elif nodeName_ == 'normal03':
+        elif nodeName_ == 'normal03' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -987,7 +987,7 @@ class DefaultType1(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'normal03')
             self.normal03 = fval_
-        elif nodeName_ == 'normal04':
+        elif nodeName_ == 'normal04' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -995,7 +995,7 @@ class DefaultType1(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'normal04')
             self.normal04 = fval_
-        elif nodeName_ == 'default03':
+        elif nodeName_ == 'default03' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1003,7 +1003,7 @@ class DefaultType1(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'default03')
             self.default03 = fval_
-        elif nodeName_ == 'default04':
+        elif nodeName_ == 'default04' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
diff --git a/tests/defaults_cases_always2_sup.py b/tests/defaults_cases_always2_sup.py
index c4a28c0bd8f40e4f5e0962e7ad71e4c1caa2196b..fc155a581b7bbdabb1b2e549b548aa003c7f4ef9 100644
--- a/tests/defaults_cases_always2_sup.py
+++ b/tests/defaults_cases_always2_sup.py
@@ -955,7 +955,7 @@ class DefaultType1(GeneratedsSuper):
     def buildAttributes(self, node, attrs, already_processed):
         pass
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
-        if nodeName_ == 'normal01':
+        if nodeName_ == 'normal01' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -967,7 +967,7 @@ class DefaultType1(GeneratedsSuper):
             normal02_ = child_.text
             normal02_ = self.gds_validate_string(normal02_, node, 'normal02')
             self.normal02 = normal02_
-        elif nodeName_ == 'default01':
+        elif nodeName_ == 'default01' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -979,7 +979,7 @@ class DefaultType1(GeneratedsSuper):
             default02_ = child_.text
             default02_ = self.gds_validate_string(default02_, node, 'default02')
             self.default02 = default02_
-        elif nodeName_ == 'normal03':
+        elif nodeName_ == 'normal03' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -987,7 +987,7 @@ class DefaultType1(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'normal03')
             self.normal03 = fval_
-        elif nodeName_ == 'normal04':
+        elif nodeName_ == 'normal04' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -995,7 +995,7 @@ class DefaultType1(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'normal04')
             self.normal04 = fval_
-        elif nodeName_ == 'default03':
+        elif nodeName_ == 'default03' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1003,7 +1003,7 @@ class DefaultType1(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'default03')
             self.default03 = fval_
-        elif nodeName_ == 'default04':
+        elif nodeName_ == 'default04' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
diff --git a/tests/defaults_coverage1_sup.py b/tests/defaults_coverage1_sup.py
index 052c02a4d04cdfb9bf6358adc63da8a941f1a2f9..318cf4aa46eeb8668063ca002e6423da0d59d3c5 100644
--- a/tests/defaults_coverage1_sup.py
+++ b/tests/defaults_coverage1_sup.py
@@ -1039,7 +1039,7 @@ class DefaultType1(GeneratedsSuper):
     def buildAttributes(self, node, attrs, already_processed):
         pass
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
-        if nodeName_ == 'default01':
+        if nodeName_ == 'default01' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1047,7 +1047,7 @@ class DefaultType1(GeneratedsSuper):
                 raise_parse_error(child_, 'requires integer: %s' % exp)
             ival_ = self.gds_validate_integer(ival_, node, 'default01')
             self.default01 = ival_
-        elif nodeName_ == 'normal01':
+        elif nodeName_ == 'normal01' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1063,7 +1063,7 @@ class DefaultType1(GeneratedsSuper):
             normal02_ = child_.text
             normal02_ = self.gds_validate_string(normal02_, node, 'normal02')
             self.normal02 = normal02_
-        elif nodeName_ == 'default03':
+        elif nodeName_ == 'default03' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1071,7 +1071,7 @@ class DefaultType1(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'default03')
             self.default03 = fval_
-        elif nodeName_ == 'normal03':
+        elif nodeName_ == 'normal03' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1079,7 +1079,7 @@ class DefaultType1(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'normal03')
             self.normal03 = fval_
-        elif nodeName_ == 'default04':
+        elif nodeName_ == 'default04' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1087,7 +1087,7 @@ class DefaultType1(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'default04')
             self.default04 = fval_
-        elif nodeName_ == 'normal04':
+        elif nodeName_ == 'normal04' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1374,7 +1374,7 @@ class DefaultType2(GeneratedsSuper):
     def buildAttributes(self, node, attrs, already_processed):
         pass
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
-        if nodeName_ == 'default01':
+        if nodeName_ == 'default01' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1382,7 +1382,7 @@ class DefaultType2(GeneratedsSuper):
                 raise_parse_error(child_, 'requires integer: %s' % exp)
             ival_ = self.gds_validate_integer(ival_, node, 'default01')
             self.default01 = ival_
-        elif nodeName_ == 'normal01':
+        elif nodeName_ == 'normal01' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1398,7 +1398,7 @@ class DefaultType2(GeneratedsSuper):
             normal02_ = child_.text
             normal02_ = self.gds_validate_string(normal02_, node, 'normal02')
             self.normal02 = normal02_
-        elif nodeName_ == 'default03':
+        elif nodeName_ == 'default03' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1406,7 +1406,7 @@ class DefaultType2(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'default03')
             self.default03 = fval_
-        elif nodeName_ == 'normal03':
+        elif nodeName_ == 'normal03' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1414,7 +1414,7 @@ class DefaultType2(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'normal03')
             self.normal03 = fval_
-        elif nodeName_ == 'default04':
+        elif nodeName_ == 'default04' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1422,7 +1422,7 @@ class DefaultType2(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'default04')
             self.default04 = fval_
-        elif nodeName_ == 'normal04':
+        elif nodeName_ == 'normal04' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
diff --git a/tests/ipo1_sup.py b/tests/ipo1_sup.py
index 82cd1f9f371525397a828abb544cc17679895881..9f64f692f6953b9aa6f6793f8e296c975df5609a 100644
--- a/tests/ipo1_sup.py
+++ b/tests/ipo1_sup.py
@@ -1067,7 +1067,7 @@ class item(GeneratedsSuper):
             productName_ = child_.text
             productName_ = self.gds_validate_string(productName_, node, 'productName')
             self.productName = productName_
-        elif nodeName_ == 'quantity':
+        elif nodeName_ == 'quantity' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1077,7 +1077,7 @@ class item(GeneratedsSuper):
                 raise_parse_error(child_, 'requires positiveInteger')
             ival_ = self.gds_validate_integer(ival_, node, 'quantity')
             self.quantity = ival_
-        elif nodeName_ == 'USPrice':
+        elif nodeName_ == 'USPrice' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1371,7 +1371,7 @@ class USAddress(Address):
             self.state = state_
             # validate type USState
             self.validate_USState(self.state)
-        elif nodeName_ == 'zip':
+        elif nodeName_ == 'zip' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
diff --git a/tests/ipo2_sup.py b/tests/ipo2_sup.py
index 82cd1f9f371525397a828abb544cc17679895881..9f64f692f6953b9aa6f6793f8e296c975df5609a 100644
--- a/tests/ipo2_sup.py
+++ b/tests/ipo2_sup.py
@@ -1067,7 +1067,7 @@ class item(GeneratedsSuper):
             productName_ = child_.text
             productName_ = self.gds_validate_string(productName_, node, 'productName')
             self.productName = productName_
-        elif nodeName_ == 'quantity':
+        elif nodeName_ == 'quantity' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1077,7 +1077,7 @@ class item(GeneratedsSuper):
                 raise_parse_error(child_, 'requires positiveInteger')
             ival_ = self.gds_validate_integer(ival_, node, 'quantity')
             self.quantity = ival_
-        elif nodeName_ == 'USPrice':
+        elif nodeName_ == 'USPrice' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1371,7 +1371,7 @@ class USAddress(Address):
             self.state = state_
             # validate type USState
             self.validate_USState(self.state)
-        elif nodeName_ == 'zip':
+        elif nodeName_ == 'zip' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
diff --git a/tests/mapcleanname1_sup.py b/tests/mapcleanname1_sup.py
index 2c6b831321f2237fe20f55c1be2a33ed8c88a374..0dfcead668d949caa6b54b451ba111dc85cf350c 100644
--- a/tests/mapcleanname1_sup.py
+++ b/tests/mapcleanname1_sup.py
@@ -831,7 +831,7 @@ class complex_type01(GeneratedsSuper):
             string_value01_ = child_.text
             string_value01_ = self.gds_validate_string(string_value01_, node, 'string_value01')
             self.string_value01 = string_value01_
-        elif nodeName_ == 'integer_value01':
+        elif nodeName_ == 'integer_value01' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -839,7 +839,7 @@ class complex_type01(GeneratedsSuper):
                 raise_parse_error(child_, 'requires integer: %s' % exp)
             ival_ = self.gds_validate_integer(ival_, node, 'integer_value01')
             self.integer_value01.append(ival_)
-        elif nodeName_ == 'float_value01':
+        elif nodeName_ == 'float_value01' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -961,7 +961,7 @@ class complex_type02(GeneratedsSuper):
             string_value02_ = child_.text
             string_value02_ = self.gds_validate_string(string_value02_, node, 'string_value02')
             self.string_value02 = string_value02_
-        elif nodeName_ == 'integer_value02':
+        elif nodeName_ == 'integer_value02' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -969,7 +969,7 @@ class complex_type02(GeneratedsSuper):
                 raise_parse_error(child_, 'requires integer: %s' % exp)
             ival_ = self.gds_validate_integer(ival_, node, 'integer_value02')
             self.integer_value02.append(ival_)
-        elif nodeName_ == 'float_value02':
+        elif nodeName_ == 'float_value02' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1079,7 +1079,7 @@ class complex_type03(complex_type02):
             string_value03_ = child_.text
             string_value03_ = self.gds_validate_string(string_value03_, node, 'string_value03')
             self.string_value03 = string_value03_
-        elif nodeName_ == 'integer_value03':
+        elif nodeName_ == 'integer_value03' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1087,7 +1087,7 @@ class complex_type03(complex_type02):
                 raise_parse_error(child_, 'requires integer: %s' % exp)
             ival_ = self.gds_validate_integer(ival_, node, 'integer_value03')
             self.integer_value03.append(ival_)
-        elif nodeName_ == 'float_value03':
+        elif nodeName_ == 'float_value03' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1205,7 +1205,7 @@ class type_(GeneratedsSuper):
             string_value02_ = child_.text
             string_value02_ = self.gds_validate_string(string_value02_, node, 'string_value02')
             self.string_value02 = string_value02_
-        elif nodeName_ == 'integer_value02':
+        elif nodeName_ == 'integer_value02' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1213,7 +1213,7 @@ class type_(GeneratedsSuper):
                 raise_parse_error(child_, 'requires integer: %s' % exp)
             ival_ = self.gds_validate_integer(ival_, node, 'integer_value02')
             self.integer_value02.append(ival_)
-        elif nodeName_ == 'float_value02':
+        elif nodeName_ == 'float_value02' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1323,7 +1323,7 @@ class complex_type04(type_):
             string_value03_ = child_.text
             string_value03_ = self.gds_validate_string(string_value03_, node, 'string_value03')
             self.string_value03 = string_value03_
-        elif nodeName_ == 'integer_value03':
+        elif nodeName_ == 'integer_value03' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1331,7 +1331,7 @@ class complex_type04(type_):
                 raise_parse_error(child_, 'requires integer: %s' % exp)
             ival_ = self.gds_validate_integer(ival_, node, 'integer_value03')
             self.integer_value03.append(ival_)
-        elif nodeName_ == 'float_value03':
+        elif nodeName_ == 'float_value03' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1449,7 +1449,7 @@ class build_(GeneratedsSuper):
             string_value02_ = child_.text
             string_value02_ = self.gds_validate_string(string_value02_, node, 'string_value02')
             self.string_value02 = string_value02_
-        elif nodeName_ == 'integer_value02':
+        elif nodeName_ == 'integer_value02' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1457,7 +1457,7 @@ class build_(GeneratedsSuper):
                 raise_parse_error(child_, 'requires integer: %s' % exp)
             ival_ = self.gds_validate_integer(ival_, node, 'integer_value02')
             self.integer_value02.append(ival_)
-        elif nodeName_ == 'float_value02':
+        elif nodeName_ == 'float_value02' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1567,7 +1567,7 @@ class complex_type05(build_):
             string_value03_ = child_.text
             string_value03_ = self.gds_validate_string(string_value03_, node, 'string_value03')
             self.string_value03 = string_value03_
-        elif nodeName_ == 'integer_value03':
+        elif nodeName_ == 'integer_value03' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1575,7 +1575,7 @@ class complex_type05(build_):
                 raise_parse_error(child_, 'requires integer: %s' % exp)
             ival_ = self.gds_validate_integer(ival_, node, 'integer_value03')
             self.integer_value03.append(ival_)
-        elif nodeName_ == 'float_value03':
+        elif nodeName_ == 'float_value03' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
diff --git a/tests/mixedcontent1_sup.py b/tests/mixedcontent1_sup.py
index 4c311da4883d300921ca0a936cb80811f8921c82..218fff3f155505c4dbf0039ebc3219bd4f74d566 100644
--- a/tests/mixedcontent1_sup.py
+++ b/tests/mixedcontent1_sup.py
@@ -1055,7 +1055,7 @@ class nestedType(GeneratedsSuper):
             nested2_ = child_.text
             nested2_ = self.gds_validate_string(nested2_, node, 'nested2')
             self.nested2.append(nested2_)
-        elif nodeName_ == 'nested3':
+        elif nodeName_ == 'nested3' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
diff --git a/tests/mixedcontent2_sup.py b/tests/mixedcontent2_sup.py
index 4c311da4883d300921ca0a936cb80811f8921c82..218fff3f155505c4dbf0039ebc3219bd4f74d566 100644
--- a/tests/mixedcontent2_sup.py
+++ b/tests/mixedcontent2_sup.py
@@ -1055,7 +1055,7 @@ class nestedType(GeneratedsSuper):
             nested2_ = child_.text
             nested2_ = self.gds_validate_string(nested2_, node, 'nested2')
             self.nested2.append(nested2_)
-        elif nodeName_ == 'nested3':
+        elif nodeName_ == 'nested3' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
diff --git a/tests/out1_sup.py b/tests/out1_sup.py
index 93c84986bb801622d6ffe063a508e4f0605ed83b..12f1c213b944f96897b01e22daefaa1911f2e380 100644
--- a/tests/out1_sup.py
+++ b/tests/out1_sup.py
@@ -1460,7 +1460,7 @@ class person(GeneratedsSuper):
             interest_ = child_.text
             interest_ = self.gds_validate_string(interest_, node, 'interest')
             self.interest.append(interest_)
-        elif nodeName_ == 'category':
+        elif nodeName_ == 'category' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1886,7 +1886,7 @@ class programmer(person):
             email_ = child_.text
             email_ = self.gds_validate_string(email_, node, 'email')
             self.email = email_
-        elif nodeName_ == 'elposint':
+        elif nodeName_ == 'elposint' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1896,7 +1896,7 @@ class programmer(person):
                 raise_parse_error(child_, 'requires positiveInteger')
             ival_ = self.gds_validate_integer(ival_, node, 'elposint')
             self.elposint = ival_
-        elif nodeName_ == 'elnonposint':
+        elif nodeName_ == 'elnonposint' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1906,7 +1906,7 @@ class programmer(person):
                 raise_parse_error(child_, 'requires nonPositiveInteger')
             ival_ = self.gds_validate_integer(ival_, node, 'elnonposint')
             self.elnonposint = ival_
-        elif nodeName_ == 'elnegint':
+        elif nodeName_ == 'elnegint' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1916,7 +1916,7 @@ class programmer(person):
                 raise_parse_error(child_, 'requires negativeInteger')
             ival_ = self.gds_validate_integer(ival_, node, 'elnegint')
             self.elnegint = ival_
-        elif nodeName_ == 'elnonnegint':
+        elif nodeName_ == 'elnonnegint' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1942,7 +1942,7 @@ class programmer(person):
                 eltoken_ = ""
             eltoken_ = self.gds_validate_string(eltoken_, node, 'eltoken')
             self.eltoken = eltoken_
-        elif nodeName_ == 'elshort':
+        elif nodeName_ == 'elshort' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1950,7 +1950,7 @@ class programmer(person):
                 raise_parse_error(child_, 'requires integer: %s' % exp)
             ival_ = self.gds_validate_integer(ival_, node, 'elshort')
             self.elshort = ival_
-        elif nodeName_ == 'ellong':
+        elif nodeName_ == 'ellong' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -2686,7 +2686,7 @@ class agent(GeneratedsSuper):
             lastname_ = child_.text
             lastname_ = self.gds_validate_string(lastname_, node, 'lastname')
             self.lastname = lastname_
-        elif nodeName_ == 'priority':
+        elif nodeName_ == 'priority' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -2873,7 +2873,7 @@ class special_agent(GeneratedsSuper):
             lastname_ = child_.text
             lastname_ = self.gds_validate_string(lastname_, node, 'lastname')
             self.lastname = lastname_
-        elif nodeName_ == 'priority':
+        elif nodeName_ == 'priority' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -3129,7 +3129,7 @@ class booster(GeneratedsSuper):
             lastname_ = child_.text
             lastname_ = self.gds_validate_string(lastname_, node, 'lastname')
             self.lastname = lastname_
-        elif nodeName_ == 'other-name':
+        elif nodeName_ == 'other-name' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -3137,7 +3137,7 @@ class booster(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'other_name')
             self.other_name = fval_
-        elif nodeName_ == 'class':
+        elif nodeName_ == 'class' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -3145,7 +3145,7 @@ class booster(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'class')
             self.class_ = fval_
-        elif nodeName_ == 'other-value':
+        elif nodeName_ == 'other-value' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -3153,7 +3153,7 @@ class booster(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'other_value')
             self.other_value.append(fval_)
-        elif nodeName_ == 'type':
+        elif nodeName_ == 'type' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -3479,7 +3479,7 @@ class client_handlerType(GeneratedsSuper):
             fullname_ = child_.text
             fullname_ = self.gds_validate_string(fullname_, node, 'fullname')
             self.fullname = fullname_
-        elif nodeName_ == 'refid':
+        elif nodeName_ == 'refid' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
diff --git a/tests/people_procincl1_sup.py b/tests/people_procincl1_sup.py
index 11849ef0f7ae813c4c94f5023ee3e745d5e53d42..2264fa3a11a58d21400c6e64580761cef8d205d2 100644
--- a/tests/people_procincl1_sup.py
+++ b/tests/people_procincl1_sup.py
@@ -1247,7 +1247,7 @@ class person(GeneratedsSuper):
             interest_ = child_.text
             interest_ = self.gds_validate_string(interest_, node, 'interest')
             self.interest.append(interest_)
-        elif nodeName_ == 'category':
+        elif nodeName_ == 'category' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1588,7 +1588,7 @@ class agent(GeneratedsSuper):
             lastname_ = child_.text
             lastname_ = self.gds_validate_string(lastname_, node, 'lastname')
             self.lastname = lastname_
-        elif nodeName_ == 'priority':
+        elif nodeName_ == 'priority' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1726,7 +1726,7 @@ class special_agent(GeneratedsSuper):
             lastname_ = child_.text
             lastname_ = self.gds_validate_string(lastname_, node, 'lastname')
             self.lastname = lastname_
-        elif nodeName_ == 'priority':
+        elif nodeName_ == 'priority' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1894,7 +1894,7 @@ class booster(GeneratedsSuper):
             lastname_ = child_.text
             lastname_ = self.gds_validate_string(lastname_, node, 'lastname')
             self.lastname = lastname_
-        elif nodeName_ == 'other-name':
+        elif nodeName_ == 'other-name' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1902,7 +1902,7 @@ class booster(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'other_name')
             self.other_name = fval_
-        elif nodeName_ == 'class':
+        elif nodeName_ == 'class' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1910,7 +1910,7 @@ class booster(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'class')
             self.class_ = fval_
-        elif nodeName_ == 'other-value':
+        elif nodeName_ == 'other-value' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1918,7 +1918,7 @@ class booster(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'other_value')
             self.other_value.append(fval_)
-        elif nodeName_ == 'type':
+        elif nodeName_ == 'type' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -2114,7 +2114,7 @@ class vehicle(GeneratedsSuper):
             already_processed.add('xsi:type')
             self.extensiontype_ = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
-        if nodeName_ == 'wheelcount':
+        if nodeName_ == 'wheelcount' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -2559,7 +2559,7 @@ class programmer(person):
             email_ = child_.text
             email_ = self.gds_validate_string(email_, node, 'email')
             self.email = email_
-        elif nodeName_ == 'elposint':
+        elif nodeName_ == 'elposint' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -2569,7 +2569,7 @@ class programmer(person):
                 raise_parse_error(child_, 'requires positiveInteger')
             ival_ = self.gds_validate_integer(ival_, node, 'elposint')
             self.elposint = ival_
-        elif nodeName_ == 'elnonposint':
+        elif nodeName_ == 'elnonposint' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -2579,7 +2579,7 @@ class programmer(person):
                 raise_parse_error(child_, 'requires nonPositiveInteger')
             ival_ = self.gds_validate_integer(ival_, node, 'elnonposint')
             self.elnonposint = ival_
-        elif nodeName_ == 'elnegint':
+        elif nodeName_ == 'elnegint' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -2589,7 +2589,7 @@ class programmer(person):
                 raise_parse_error(child_, 'requires negativeInteger')
             ival_ = self.gds_validate_integer(ival_, node, 'elnegint')
             self.elnegint = ival_
-        elif nodeName_ == 'elnonnegint':
+        elif nodeName_ == 'elnonnegint' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -2611,7 +2611,7 @@ class programmer(person):
                 eltoken_ = ""
             eltoken_ = self.gds_validate_string(eltoken_, node, 'eltoken')
             self.eltoken = eltoken_
-        elif nodeName_ == 'elshort':
+        elif nodeName_ == 'elshort' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -2619,7 +2619,7 @@ class programmer(person):
                 raise_parse_error(child_, 'requires integer: %s' % exp)
             ival_ = self.gds_validate_integer(ival_, node, 'elshort')
             self.elshort = ival_
-        elif nodeName_ == 'ellong':
+        elif nodeName_ == 'ellong' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -2724,7 +2724,7 @@ class client_handlerType(GeneratedsSuper):
             fullname_ = child_.text
             fullname_ = self.gds_validate_string(fullname_, node, 'fullname')
             self.fullname = fullname_
-        elif nodeName_ == 'refid':
+        elif nodeName_ == 'refid' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
diff --git a/tests/prefix_classname1_sup.py b/tests/prefix_classname1_sup.py
index 7d3c39ae43023dc5590de7c0bf0fd760413a136c..ccaed9788052bac0893471dca0e38e4944b12a84 100644
--- a/tests/prefix_classname1_sup.py
+++ b/tests/prefix_classname1_sup.py
@@ -1206,7 +1206,7 @@ class tomato_person(GeneratedsSuper):
             interest_ = child_.text
             interest_ = self.gds_validate_string(interest_, node, 'interest')
             self.interest.append(interest_)
-        elif nodeName_ == 'category':
+        elif nodeName_ == 'category' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1513,7 +1513,7 @@ class tomato_programmer(tomato_person):
             email_ = child_.text
             email_ = self.gds_validate_string(email_, node, 'email')
             self.email = email_
-        elif nodeName_ == 'elposint':
+        elif nodeName_ == 'elposint' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1523,7 +1523,7 @@ class tomato_programmer(tomato_person):
                 raise_parse_error(child_, 'requires positiveInteger')
             ival_ = self.gds_validate_integer(ival_, node, 'elposint')
             self.elposint = ival_
-        elif nodeName_ == 'elnonposint':
+        elif nodeName_ == 'elnonposint' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1533,7 +1533,7 @@ class tomato_programmer(tomato_person):
                 raise_parse_error(child_, 'requires nonPositiveInteger')
             ival_ = self.gds_validate_integer(ival_, node, 'elnonposint')
             self.elnonposint = ival_
-        elif nodeName_ == 'elnegint':
+        elif nodeName_ == 'elnegint' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1543,7 +1543,7 @@ class tomato_programmer(tomato_person):
                 raise_parse_error(child_, 'requires negativeInteger')
             ival_ = self.gds_validate_integer(ival_, node, 'elnegint')
             self.elnegint = ival_
-        elif nodeName_ == 'elnonnegint':
+        elif nodeName_ == 'elnonnegint' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1569,7 +1569,7 @@ class tomato_programmer(tomato_person):
                 eltoken_ = ""
             eltoken_ = self.gds_validate_string(eltoken_, node, 'eltoken')
             self.eltoken = eltoken_
-        elif nodeName_ == 'elshort':
+        elif nodeName_ == 'elshort' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1577,7 +1577,7 @@ class tomato_programmer(tomato_person):
                 raise_parse_error(child_, 'requires integer: %s' % exp)
             ival_ = self.gds_validate_integer(ival_, node, 'elshort')
             self.elshort = ival_
-        elif nodeName_ == 'ellong':
+        elif nodeName_ == 'ellong' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -2032,7 +2032,7 @@ class tomato_agent(GeneratedsSuper):
             lastname_ = child_.text
             lastname_ = self.gds_validate_string(lastname_, node, 'lastname')
             self.lastname = lastname_
-        elif nodeName_ == 'priority':
+        elif nodeName_ == 'priority' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -2149,7 +2149,7 @@ class tomato_special_agent(GeneratedsSuper):
             lastname_ = child_.text
             lastname_ = self.gds_validate_string(lastname_, node, 'lastname')
             self.lastname = lastname_
-        elif nodeName_ == 'priority':
+        elif nodeName_ == 'priority' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -2308,7 +2308,7 @@ class tomato_booster(GeneratedsSuper):
             lastname_ = child_.text
             lastname_ = self.gds_validate_string(lastname_, node, 'lastname')
             self.lastname = lastname_
-        elif nodeName_ == 'other-name':
+        elif nodeName_ == 'other-name' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -2316,7 +2316,7 @@ class tomato_booster(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'other_name')
             self.other_name = fval_
-        elif nodeName_ == 'class':
+        elif nodeName_ == 'class' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -2324,7 +2324,7 @@ class tomato_booster(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'class')
             self.class_ = fval_
-        elif nodeName_ == 'other-value':
+        elif nodeName_ == 'other-value' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -2332,7 +2332,7 @@ class tomato_booster(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'other_value')
             self.other_value.append(fval_)
-        elif nodeName_ == 'type':
+        elif nodeName_ == 'type' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -2530,7 +2530,7 @@ class tomato_client_handlerType(GeneratedsSuper):
             fullname_ = child_.text
             fullname_ = self.gds_validate_string(fullname_, node, 'fullname')
             self.fullname = fullname_
-        elif nodeName_ == 'refid':
+        elif nodeName_ == 'refid' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
diff --git a/tests/recursive_simpletype1_sup.py b/tests/recursive_simpletype1_sup.py
index ad25d513e54ad98b608db4c301757d1e37bd3b2f..850c8c3cde81c62d8e183aa65ea4c76d5397b950 100644
--- a/tests/recursive_simpletype1_sup.py
+++ b/tests/recursive_simpletype1_sup.py
@@ -814,7 +814,7 @@ class PersonType(GeneratedsSuper):
     def buildAttributes(self, node, attrs, already_processed):
         pass
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
-        if nodeName_ == 'personId':
+        if nodeName_ == 'personId' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
diff --git a/tests/reference_simpletype1_sup.py b/tests/reference_simpletype1_sup.py
index a65f20083559720b68962e98bcec13352233a059..9b1015f3352f337c3a8b163600b11cba3166f2b8 100644
--- a/tests/reference_simpletype1_sup.py
+++ b/tests/reference_simpletype1_sup.py
@@ -833,7 +833,7 @@ class dummy(GeneratedsSuper):
             except ValueError as exp:
                 raise_parse_error(node, 'Bad integer attribute: %s' % exp)
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
-        if nodeName_ == 'test_ref_element':
+        if nodeName_ == 'test_ref_element' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -841,7 +841,7 @@ class dummy(GeneratedsSuper):
                 raise_parse_error(child_, 'requires integer: %s' % exp)
             ival_ = self.gds_validate_integer(ival_, node, 'test_ref_element')
             self.test_ref_element = ival_
-        elif nodeName_ == 'test_normal_element':
+        elif nodeName_ == 'test_normal_element' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
diff --git a/tests/simpletypes_other1_sup.py b/tests/simpletypes_other1_sup.py
index 2e3d06224384774eda470924d8ae94d27cccd975..1a9c41171e3612f9e8efee701d0a410ed14294e1 100644
--- a/tests/simpletypes_other1_sup.py
+++ b/tests/simpletypes_other1_sup.py
@@ -1117,7 +1117,7 @@ class simpleTypeTestDefs(GeneratedsSuper):
             datetime5_ = child_.text
             datetime5_ = self.gds_validate_string(datetime5_, node, 'datetime5')
             self.datetime5 = datetime5_
-        elif nodeName_ == 'integerVal1':
+        elif nodeName_ == 'integerVal1' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1125,7 +1125,7 @@ class simpleTypeTestDefs(GeneratedsSuper):
                 raise_parse_error(child_, 'requires integer: %s' % exp)
             ival_ = self.gds_validate_integer(ival_, node, 'integerVal1')
             self.integerVal1 = ival_
-        elif nodeName_ == 'integerVal2':
+        elif nodeName_ == 'integerVal2' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1161,7 +1161,7 @@ class simpleTypeTestDefs(GeneratedsSuper):
                 raise_parse_error(child_, 'requires boolean')
             ival_ = self.gds_validate_boolean(ival_, node, 'booleanVal2')
             self.booleanVal2.append(ival_)
-        elif nodeName_ == 'decimalVal1':
+        elif nodeName_ == 'decimalVal1' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1169,7 +1169,7 @@ class simpleTypeTestDefs(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'decimalVal1')
             self.decimalVal1 = fval_
-        elif nodeName_ == 'decimalVal2':
+        elif nodeName_ == 'decimalVal2' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1177,7 +1177,7 @@ class simpleTypeTestDefs(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'decimalVal2')
             self.decimalVal2.append(fval_)
-        elif nodeName_ == 'doubleVal1':
+        elif nodeName_ == 'doubleVal1' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1185,7 +1185,7 @@ class simpleTypeTestDefs(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'doubleVal1')
             self.doubleVal1 = fval_
-        elif nodeName_ == 'doubleVal2':
+        elif nodeName_ == 'doubleVal2' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1193,7 +1193,7 @@ class simpleTypeTestDefs(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'doubleVal2')
             self.doubleVal2.append(fval_)
-        elif nodeName_ == 'floatVal1':
+        elif nodeName_ == 'floatVal1' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1201,7 +1201,7 @@ class simpleTypeTestDefs(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'floatVal1')
             self.floatVal1 = fval_
-        elif nodeName_ == 'floatVal2':
+        elif nodeName_ == 'floatVal2' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
diff --git a/tests/to_etree1_sup.py b/tests/to_etree1_sup.py
index d3602083b39f339c48456d6a1bfc774e0df00ee0..93dfd28ebb481f092e3eeff2eced8166f80bf7e0 100644
--- a/tests/to_etree1_sup.py
+++ b/tests/to_etree1_sup.py
@@ -1192,7 +1192,7 @@ class personType(GeneratedsSuper):
             interest_ = child_.text
             interest_ = self.gds_validate_string(interest_, node, 'interest')
             self.interest.append(interest_)
-        elif nodeName_ == 'category':
+        elif nodeName_ == 'category' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1220,7 +1220,7 @@ class personType(GeneratedsSuper):
             description_ = child_.text
             description_ = self.gds_validate_string(description_, node, 'description')
             self.description = description_
-        elif nodeName_ == 'range':
+        elif nodeName_ == 'range' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1542,7 +1542,7 @@ class programmerType(personType):
             email_ = child_.text
             email_ = self.gds_validate_string(email_, node, 'email')
             self.email = email_
-        elif nodeName_ == 'elposint':
+        elif nodeName_ == 'elposint' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1552,7 +1552,7 @@ class programmerType(personType):
                 raise_parse_error(child_, 'requires positiveInteger')
             ival_ = self.gds_validate_integer(ival_, node, 'elposint')
             self.elposint = ival_
-        elif nodeName_ == 'elnonposint':
+        elif nodeName_ == 'elnonposint' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1562,7 +1562,7 @@ class programmerType(personType):
                 raise_parse_error(child_, 'requires nonPositiveInteger')
             ival_ = self.gds_validate_integer(ival_, node, 'elnonposint')
             self.elnonposint = ival_
-        elif nodeName_ == 'elnegint':
+        elif nodeName_ == 'elnegint' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1572,7 +1572,7 @@ class programmerType(personType):
                 raise_parse_error(child_, 'requires negativeInteger')
             ival_ = self.gds_validate_integer(ival_, node, 'elnegint')
             self.elnegint = ival_
-        elif nodeName_ == 'elnonnegint':
+        elif nodeName_ == 'elnonnegint' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1602,7 +1602,7 @@ class programmerType(personType):
                 eltoken_ = ""
             eltoken_ = self.gds_validate_string(eltoken_, node, 'eltoken')
             self.eltoken = eltoken_
-        elif nodeName_ == 'elshort':
+        elif nodeName_ == 'elshort' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1610,7 +1610,7 @@ class programmerType(personType):
                 raise_parse_error(child_, 'requires integer: %s' % exp)
             ival_ = self.gds_validate_integer(ival_, node, 'elshort')
             self.elshort = ival_
-        elif nodeName_ == 'ellong':
+        elif nodeName_ == 'ellong' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1864,7 +1864,7 @@ class python_programmerType(programmerType):
             favorite_editor_ = child_.text
             favorite_editor_ = self.gds_validate_string(favorite_editor_, node, 'favorite_editor')
             self.favorite_editor = favorite_editor_
-        elif nodeName_ == 'flowvalue':
+        elif nodeName_ == 'flowvalue' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -2122,7 +2122,7 @@ class agentType(GeneratedsSuper):
             lastname_ = child_.text
             lastname_ = self.gds_validate_string(lastname_, node, 'lastname')
             self.lastname = lastname_
-        elif nodeName_ == 'priority':
+        elif nodeName_ == 'priority' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -2240,7 +2240,7 @@ class special_agentType(agentType):
             lastname_ = child_.text
             lastname_ = self.gds_validate_string(lastname_, node, 'lastname')
             self.lastname = lastname_
-        elif nodeName_ == 'priority':
+        elif nodeName_ == 'priority' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -2340,7 +2340,7 @@ class weird_agentType(agentType):
             lastname_ = child_.text
             lastname_ = self.gds_validate_string(lastname_, node, 'lastname')
             self.lastname = lastname_
-        elif nodeName_ == 'priority':
+        elif nodeName_ == 'priority' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -2487,7 +2487,7 @@ class boosterType(GeneratedsSuper):
             lastname_ = child_.text
             lastname_ = self.gds_validate_string(lastname_, node, 'lastname')
             self.lastname = lastname_
-        elif nodeName_ == 'other-name':
+        elif nodeName_ == 'other-name' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -2495,7 +2495,7 @@ class boosterType(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'other_name')
             self.other_name = fval_
-        elif nodeName_ == 'class':
+        elif nodeName_ == 'class' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -2503,7 +2503,7 @@ class boosterType(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'class')
             self.class_ = fval_
-        elif nodeName_ == 'other-value':
+        elif nodeName_ == 'other-value' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -2511,7 +2511,7 @@ class boosterType(GeneratedsSuper):
                 raise_parse_error(child_, 'requires float or double: %s' % exp)
             fval_ = self.gds_validate_float(fval_, node, 'other_value')
             self.other_value.append(fval_)
-        elif nodeName_ == 'type':
+        elif nodeName_ == 'type' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -2667,7 +2667,7 @@ class vehicleType(GeneratedsSuper):
             already_processed.add('xsi:type')
             self.extensiontype_ = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
-        if nodeName_ == 'wheelcount':
+        if nodeName_ == 'wheelcount' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -2884,7 +2884,7 @@ class hot_agent(GeneratedsSuper):
             lastname_ = child_.text
             lastname_ = self.gds_validate_string(lastname_, node, 'lastname')
             self.lastname = lastname_
-        elif nodeName_ == 'priority':
+        elif nodeName_ == 'priority' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -2961,7 +2961,7 @@ class client_handlerType(GeneratedsSuper):
             fullname_ = child_.text
             fullname_ = self.gds_validate_string(fullname_, node, 'fullname')
             self.fullname = fullname_
-        elif nodeName_ == 'refid':
+        elif nodeName_ == 'refid' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
diff --git a/tests/validate_simpletypes1_sup.py b/tests/validate_simpletypes1_sup.py
index 772c0fd50e8dc446fb7df5f03fadc3bba3d6c323..98d98e800d0568e38086ac8d5b45c03a31a1a62c 100644
--- a/tests/validate_simpletypes1_sup.py
+++ b/tests/validate_simpletypes1_sup.py
@@ -1361,7 +1361,7 @@ class simpleOneType(GeneratedsSuper):
             self.integer_range_1_value_with_default = value
             self.validate_integer_range_1_st(self.integer_range_1_value_with_default)    # validate type integer_range_1_st
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
-        if nodeName_ == 'integer_range_1_value':
+        if nodeName_ == 'integer_range_1_value' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1383,7 +1383,7 @@ class simpleOneType(GeneratedsSuper):
             self.token_enum_value = token_enum_value_
             # validate type token_enum_st
             self.validate_token_enum_st(self.token_enum_value)
-        elif nodeName_ == 'integer_range_incl_value':
+        elif nodeName_ == 'integer_range_incl_value' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1393,7 +1393,7 @@ class simpleOneType(GeneratedsSuper):
             self.integer_range_incl_value = ival_
             # validate type integer_range_incl_st
             self.validate_integer_range_incl_st(self.integer_range_incl_value)
-        elif nodeName_ == 'integer_range_excl_value':
+        elif nodeName_ == 'integer_range_excl_value' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1415,7 +1415,7 @@ class simpleOneType(GeneratedsSuper):
             self.length_value = length_value_
             # validate type length_st
             self.validate_length_st(self.length_value)
-        elif nodeName_ == 'totalDigits_value':
+        elif nodeName_ == 'totalDigits_value' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1509,7 +1509,7 @@ class simpleOneType(GeneratedsSuper):
             self.unicode_pattern_value = unicode_pattern_value_
             # validate type unicode_pattern_st
             self.validate_unicode_pattern_st(self.unicode_pattern_value)
-        elif nodeName_ == 'anonymous_float_value':
+        elif nodeName_ == 'anonymous_float_value' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1519,7 +1519,7 @@ class simpleOneType(GeneratedsSuper):
             self.anonymous_float_value = fval_
             # validate type anonymous_float_valueType
             self.validate_anonymous_float_valueType(self.anonymous_float_value)
-        elif nodeName_ == 'primative_integer':
+        elif nodeName_ == 'primative_integer' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1527,7 +1527,7 @@ class simpleOneType(GeneratedsSuper):
                 raise_parse_error(child_, 'requires integer: %s' % exp)
             ival_ = self.gds_validate_integer(ival_, node, 'primative_integer')
             self.primative_integer = ival_
-        elif nodeName_ == 'primative_float':
+        elif nodeName_ == 'primative_float' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
diff --git a/tests/validate_simpletypes2_sup.py b/tests/validate_simpletypes2_sup.py
index 772c0fd50e8dc446fb7df5f03fadc3bba3d6c323..98d98e800d0568e38086ac8d5b45c03a31a1a62c 100644
--- a/tests/validate_simpletypes2_sup.py
+++ b/tests/validate_simpletypes2_sup.py
@@ -1361,7 +1361,7 @@ class simpleOneType(GeneratedsSuper):
             self.integer_range_1_value_with_default = value
             self.validate_integer_range_1_st(self.integer_range_1_value_with_default)    # validate type integer_range_1_st
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
-        if nodeName_ == 'integer_range_1_value':
+        if nodeName_ == 'integer_range_1_value' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1383,7 +1383,7 @@ class simpleOneType(GeneratedsSuper):
             self.token_enum_value = token_enum_value_
             # validate type token_enum_st
             self.validate_token_enum_st(self.token_enum_value)
-        elif nodeName_ == 'integer_range_incl_value':
+        elif nodeName_ == 'integer_range_incl_value' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1393,7 +1393,7 @@ class simpleOneType(GeneratedsSuper):
             self.integer_range_incl_value = ival_
             # validate type integer_range_incl_st
             self.validate_integer_range_incl_st(self.integer_range_incl_value)
-        elif nodeName_ == 'integer_range_excl_value':
+        elif nodeName_ == 'integer_range_excl_value' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1415,7 +1415,7 @@ class simpleOneType(GeneratedsSuper):
             self.length_value = length_value_
             # validate type length_st
             self.validate_length_st(self.length_value)
-        elif nodeName_ == 'totalDigits_value':
+        elif nodeName_ == 'totalDigits_value' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1509,7 +1509,7 @@ class simpleOneType(GeneratedsSuper):
             self.unicode_pattern_value = unicode_pattern_value_
             # validate type unicode_pattern_st
             self.validate_unicode_pattern_st(self.unicode_pattern_value)
-        elif nodeName_ == 'anonymous_float_value':
+        elif nodeName_ == 'anonymous_float_value' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
@@ -1519,7 +1519,7 @@ class simpleOneType(GeneratedsSuper):
             self.anonymous_float_value = fval_
             # validate type anonymous_float_valueType
             self.validate_anonymous_float_valueType(self.anonymous_float_value)
-        elif nodeName_ == 'primative_integer':
+        elif nodeName_ == 'primative_integer' and child_.text:
             sval_ = child_.text
             try:
                 ival_ = int(sval_)
@@ -1527,7 +1527,7 @@ class simpleOneType(GeneratedsSuper):
                 raise_parse_error(child_, 'requires integer: %s' % exp)
             ival_ = self.gds_validate_integer(ival_, node, 'primative_integer')
             self.primative_integer = ival_
-        elif nodeName_ == 'primative_float':
+        elif nodeName_ == 'primative_float' and child_.text:
             sval_ = child_.text
             try:
                 fval_ = float(sval_)
diff --git a/tutorial/generateds_tutorial.html b/tutorial/generateds_tutorial.html
index 3730ea9d5e7cb11c33252b744eacf1c1e830cea9..5ecb04453c468e31fabcc0760a82e498d41a491e 100644
--- a/tutorial/generateds_tutorial.html
+++ b/tutorial/generateds_tutorial.html
@@ -219,7 +219,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.22</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.23</td>
 </tr>
 </tbody>
 </table>
@@ -228,7 +228,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">date:</th><td class="field-body">August 03, 2018</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">August 16, 2018</td>
 </tr>
 </tbody>
 </table>
@@ -1210,7 +1210,7 @@ named <tt class="docutils literal">garden_api.py</tt>, you can create an instanc
 <div class="footer">
 <hr class="footer" />
 <a class="reference external" href="generateds_tutorial.txt">View document source</a>.
-Generated on: 2018-08-03 21:41 UTC.
+Generated on: 2018-08-16 22:29 UTC.
 Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
 
 </div>
diff --git a/tutorial/generateds_tutorial.txt b/tutorial/generateds_tutorial.txt
index a85b9c3aa100780c6596d49ff04d1192fdbb77bf..dddd8f7e7e2827c829196f1dd0c0ead493472db7 100644
--- a/tutorial/generateds_tutorial.txt
+++ b/tutorial/generateds_tutorial.txt
@@ -11,7 +11,7 @@ generateDS -- Introduction and Tutorial
 
 .. version
 
-:revision: 2.29.22
+:revision: 2.29.23
 
 .. version
 
diff --git a/tutorial/generateds_tutorial.zip b/tutorial/generateds_tutorial.zip
index 49e34849c5ccb29209e2ae4cdd5357a819ce7325..b1d6245bda6c9fa3d2b918bc5768299980209f80 100644
Binary files a/tutorial/generateds_tutorial.zip and b/tutorial/generateds_tutorial.zip differ