@@ -1049,9 +1049,16 @@ QString QgsWFSProvider::convertToXML( const QVariant &value )
1049
1049
if ( value.type () == QVariant::DateTime )
1050
1050
{
1051
1051
QDateTime dt = value.toDateTime ().toUTC ();
1052
- valueStr.sprintf ( " %04d-%02d-%02dT%02d:%02d:%02d.%03dZ" ,
1053
- dt.date ().year (), dt.date ().month (), dt.date ().day (),
1054
- dt.time ().hour (), dt.time ().minute (), dt.time ().second (), dt.time ().msec () );
1052
+ if ( !dt.isNull () )
1053
+ {
1054
+ valueStr.sprintf ( " %04d-%02d-%02dT%02d:%02d:%02d.%03dZ" ,
1055
+ dt.date ().year (), dt.date ().month (), dt.date ().day (),
1056
+ dt.time ().hour (), dt.time ().minute (), dt.time ().second (), dt.time ().msec () );
1057
+ }
1058
+ else
1059
+ {
1060
+ valueStr = QString ();
1061
+ }
1055
1062
}
1056
1063
return valueStr;
1057
1064
}
@@ -1095,9 +1102,15 @@ bool QgsWFSProvider::changeAttributeValues( const QgsChangedAttributesMap &attr_
1095
1102
propertyElem.appendChild ( nameElem );
1096
1103
1097
1104
QDomElement valueElem = transactionDoc.createElementNS ( QgsWFSConstants::WFS_NAMESPACE, QStringLiteral ( " Value" ) );
1098
- QDomText valueText = transactionDoc.createTextNode ( convertToXML ( attMapIt.value () ) );
1099
- valueElem.appendChild ( valueText );
1100
- propertyElem.appendChild ( valueElem );
1105
+
1106
+ if ( attMapIt.value ().isValid () && !attMapIt.value ().isNull () )
1107
+ {
1108
+ // WFS does not support :nil='true'
1109
+ // if value is NULL, do not add value element
1110
+ QDomText valueText = transactionDoc.createTextNode ( convertToXML ( attMapIt.value () ) );
1111
+ valueElem.appendChild ( valueText );
1112
+ propertyElem.appendChild ( valueElem );
1113
+ }
1101
1114
1102
1115
updateElem.appendChild ( propertyElem );
1103
1116
}
0 commit comments