doc->encoding = xmlStrdup((const xmlChar *) "UTF-8");
            doc->standalone = standalone;
 
-           res_code = xmlParseBalancedChunkMemory(doc, NULL, NULL, 0,
-                                                  utf8string + count, NULL);
-           if (res_code != 0 || xmlerrcxt->err_occurred)
-               xml_ereport(xmlerrcxt, ERROR, ERRCODE_INVALID_XML_CONTENT,
-                           "invalid XML content");
+           /* allow empty content */
+           if (*(utf8string + count))
+           {
+               res_code = xmlParseBalancedChunkMemory(doc, NULL, NULL, 0,
+                                                      utf8string + count, NULL);
+               if (res_code != 0 || xmlerrcxt->err_occurred)
+                   xml_ereport(xmlerrcxt, ERROR, ERRCODE_INVALID_XML_CONTENT,
+                               "invalid XML content");
+           }
        }
    }
    PG_CATCH();
 
  <foo funny="<>&"'" funnier="b<a/>r"/>
 (1 row)
 
+SELECT xmlparse(content '');
+ xmlparse 
+----------
+ 
+(1 row)
+
+SELECT xmlparse(content '  ');
+ xmlparse 
+----------
+   
+(1 row)
+
 SELECT xmlparse(content 'abc');
  xmlparse 
 ----------
  <nosuchprefix:tag/>
 (1 row)
 
+SELECT xmlparse(document '');
+ERROR:  invalid XML document
+DETAIL:  line 1: switching encoding : no input
+
+^
+line 1: Document is empty
+
+^
+line 1: Start tag expected, '<' not found
+
+^
+SELECT xmlparse(document '   ');
+ERROR:  invalid XML document
+DETAIL:  line 1: Start tag expected, '<' not found
+   
+   ^
 SELECT xmlparse(document 'abc');
 ERROR:  invalid XML document
 DETAIL:  line 1: Start tag expected, '<' not found
 
 ERROR:  unsupported XML feature
 DETAIL:  This functionality requires the server to be built with libxml support.
 HINT:  You need to rebuild PostgreSQL using --with-libxml.
+SELECT xmlparse(content '');
+ERROR:  unsupported XML feature
+DETAIL:  This functionality requires the server to be built with libxml support.
+HINT:  You need to rebuild PostgreSQL using --with-libxml.
+SELECT xmlparse(content '  ');
+ERROR:  unsupported XML feature
+DETAIL:  This functionality requires the server to be built with libxml support.
+HINT:  You need to rebuild PostgreSQL using --with-libxml.
 SELECT xmlparse(content 'abc');
 ERROR:  unsupported XML feature
 DETAIL:  This functionality requires the server to be built with libxml support.
 ERROR:  unsupported XML feature
 DETAIL:  This functionality requires the server to be built with libxml support.
 HINT:  You need to rebuild PostgreSQL using --with-libxml.
+SELECT xmlparse(document '');
+ERROR:  unsupported XML feature
+DETAIL:  This functionality requires the server to be built with libxml support.
+HINT:  You need to rebuild PostgreSQL using --with-libxml.
+SELECT xmlparse(document '   ');
+ERROR:  unsupported XML feature
+DETAIL:  This functionality requires the server to be built with libxml support.
+HINT:  You need to rebuild PostgreSQL using --with-libxml.
 SELECT xmlparse(document 'abc');
 ERROR:  unsupported XML feature
 DETAIL:  This functionality requires the server to be built with libxml support.
 
 SELECT xmlelement(name foo, xmlattributes('<>&"''' as funny, xml 'b<a/>r' as funnier));
 
 
+SELECT xmlparse(content '');
+SELECT xmlparse(content '  ');
 SELECT xmlparse(content 'abc');
 SELECT xmlparse(content '<abc>x</abc>');
 SELECT xmlparse(content '<invalidentity>&</invalidentity>');
 SELECT xmlparse(content '<twoerrors>&idontexist;</unbalanced>');
 SELECT xmlparse(content '<nosuchprefix:tag/>');
 
+SELECT xmlparse(document '');
+SELECT xmlparse(document '   ');
 SELECT xmlparse(document 'abc');
 SELECT xmlparse(document '<abc>x</abc>');
 SELECT xmlparse(document '<invalidentity>&</abc>');