@@ -62,6 +62,8 @@ namespace QgsWfs
6262
6363 QString createFeatureGeoJSON ( QgsFeature *feat, const createFeatureParams ¶ms );
6464
65+ QString encodeValueToText ( const QVariant &value );
66+
6567 QDomElement createFeatureGML2 ( QgsFeature *feat, QDomDocument &doc, const createFeatureParams ¶ms, const QgsProject *project );
6668
6769 QDomElement createFeatureGML3 ( QgsFeature *feat, QDomDocument &doc, const createFeatureParams ¶ms, const QgsProject *project );
@@ -1338,7 +1340,7 @@ namespace QgsWfs
13381340 QString attributeName = fields.at ( idx ).name ();
13391341
13401342 QDomElement fieldElem = doc.createElement ( " qgs:" + attributeName.replace ( ' ' , ' _' ).replace ( cleanTagNameRegExp, QString () ) );
1341- QDomText fieldText = doc.createTextNode ( featureAttributes[idx]. toString ( ) );
1343+ QDomText fieldText = doc.createTextNode ( encodeValueToText ( featureAttributes[idx] ) );
13421344 fieldElem.appendChild ( fieldText );
13431345 typeNameElement.appendChild ( fieldElem );
13441346 }
@@ -1433,15 +1435,57 @@ namespace QgsWfs
14331435 QString attributeName = fields.at ( idx ).name ();
14341436
14351437 QDomElement fieldElem = doc.createElement ( " qgs:" + attributeName.replace ( ' ' , ' _' ).replace ( cleanTagNameRegExp, QString () ) );
1436- QDomText fieldText = doc.createTextNode ( featureAttributes[idx]. toString ( ) );
1438+ QDomText fieldText = doc.createTextNode ( encodeValueToText ( featureAttributes[idx] ) );
14371439 fieldElem.appendChild ( fieldText );
14381440 typeNameElement.appendChild ( fieldElem );
14391441 }
14401442
14411443 return featureElement;
14421444 }
14431445
1446+ QString encodeValueToText ( const QVariant &value )
1447+ {
1448+ if ( value.isNull () )
1449+ return QStringLiteral ( " null" );
1450+
1451+ switch ( value.type () )
1452+ {
1453+ case QVariant::Int:
1454+ case QVariant::UInt:
1455+ case QVariant::LongLong:
1456+ case QVariant::ULongLong:
1457+ case QVariant::Double:
1458+ return value.toString ();
1459+
1460+ case QVariant::Bool:
1461+ return value.toBool () ? QStringLiteral ( " true" ) : QStringLiteral ( " false" );
1462+
1463+ case QVariant::StringList:
1464+ case QVariant::List:
1465+ case QVariant::Map:
1466+ {
1467+ QString v = QgsJsonUtils::encodeValue ( value );
1468+
1469+ // do we need CDATA
1470+ if ( v.indexOf ( ' <' ) != -1 || v.indexOf ( ' &' ) != -1 )
1471+ v.prepend ( QStringLiteral ( " <![CDATA[" ) ).append ( QStringLiteral ( " ]]>" ) );
1472+
1473+ return v;
1474+ }
1475+
1476+ default :
1477+ case QVariant::String:
1478+ {
1479+ QString v = value.toString ();
1480+
1481+ // do we need CDATA
1482+ if ( v.indexOf ( ' <' ) != -1 || v.indexOf ( ' &' ) != -1 )
1483+ v.prepend ( QStringLiteral ( " <![CDATA[" ) ).append ( QStringLiteral ( " ]]>" ) );
14441484
1485+ return v;
1486+ }
1487+ }
1488+ }
14451489
14461490
14471491 } // namespace
0 commit comments