@@ -1027,9 +1027,16 @@ QString QgsWFSProvider::convertToXML( const QVariant& value )
1027
1027
if ( value.type () == QVariant::DateTime )
1028
1028
{
1029
1029
QDateTime dt = value.toDateTime ().toUTC ();
1030
- valueStr.sprintf ( " %04d-%02d-%02dT%02d:%02d:%02d.%03dZ" ,
1031
- dt.date ().year (), dt.date ().month (), dt.date ().day (),
1032
- dt.time ().hour (), dt.time ().minute (), dt.time ().second (), dt.time ().msec () );
1030
+ if ( !dt.isNull () )
1031
+ {
1032
+ valueStr.sprintf ( " %04d-%02d-%02dT%02d:%02d:%02d.%03dZ" ,
1033
+ dt.date ().year (), dt.date ().month (), dt.date ().day (),
1034
+ dt.time ().hour (), dt.time ().minute (), dt.time ().second (), dt.time ().msec () );
1035
+ }
1036
+ else
1037
+ {
1038
+ valueStr = QString ();
1039
+ }
1033
1040
}
1034
1041
return valueStr;
1035
1042
}
@@ -1073,9 +1080,15 @@ bool QgsWFSProvider::changeAttributeValues( const QgsChangedAttributesMap &attr_
1073
1080
propertyElem.appendChild ( nameElem );
1074
1081
1075
1082
QDomElement valueElem = transactionDoc.createElementNS ( QgsWFSConstants::WFS_NAMESPACE, " Value" );
1076
- QDomText valueText = transactionDoc.createTextNode ( convertToXML ( attMapIt.value () ) );
1077
- valueElem.appendChild ( valueText );
1078
- propertyElem.appendChild ( valueElem );
1083
+
1084
+ if ( attMapIt.value ().isValid () && !attMapIt.value ().isNull () )
1085
+ {
1086
+ // WFS does not support :nil='true'
1087
+ // if value is NULL, do not add value element
1088
+ QDomText valueText = transactionDoc.createTextNode ( convertToXML ( attMapIt.value () ) );
1089
+ valueElem.appendChild ( valueText );
1090
+ propertyElem.appendChild ( valueElem );
1091
+ }
1079
1092
1080
1093
updateElem.appendChild ( propertyElem );
1081
1094
}
0 commit comments