@@ -2129,7 +2129,7 @@ QDomElement QgsWFSServer::createFeatureGML2( QgsFeature* feat, QDomDocument& doc
2129
2129
}*/
2130
2130
2131
2131
QDomElement fieldElem = doc.createElement ( " qgs:" + attributeName.replace ( " " , " _" ).replace ( mConfigParser ->getCleanTagNameRegExp (), " " ) );
2132
- QDomText fieldText = doc.createTextNode ( featureAttributes[idx]. toString ( ) );
2132
+ QDomText fieldText = doc.createTextNode ( encodeValueToText ( featureAttributes[idx] ) );
2133
2133
fieldElem.appendChild ( fieldText );
2134
2134
typeNameElement.appendChild ( fieldElem );
2135
2135
}
@@ -2213,14 +2213,62 @@ QDomElement QgsWFSServer::createFeatureGML3( QgsFeature* feat, QDomDocument& doc
2213
2213
}*/
2214
2214
2215
2215
QDomElement fieldElem = doc.createElement ( " qgs:" + attributeName.replace ( " " , " _" ).replace ( mConfigParser ->getCleanTagNameRegExp (), " " ) );
2216
- QDomText fieldText = doc.createTextNode ( featureAttributes[idx]. toString ( ) );
2216
+ QDomText fieldText = doc.createTextNode ( encodeValueToText ( featureAttributes[idx] ) );
2217
2217
fieldElem.appendChild ( fieldText );
2218
2218
typeNameElement.appendChild ( fieldElem );
2219
2219
}
2220
2220
2221
2221
return featureElement;
2222
2222
}
2223
2223
2224
+ QString QgsWFSServer::encodeValueToText ( const QVariant& value )
2225
+ {
2226
+ if ( value.isNull () )
2227
+ return " null" ;
2228
+
2229
+ switch ( value.type () )
2230
+ {
2231
+ case QVariant::Int:
2232
+ case QVariant::UInt:
2233
+ case QVariant::LongLong:
2234
+ case QVariant::ULongLong:
2235
+ case QVariant::Double:
2236
+ return value.toString ();
2237
+
2238
+ case QVariant::Bool:
2239
+ return value.toBool () ? " true" : " false" ;
2240
+
2241
+ case QVariant::StringList:
2242
+ case QVariant::List:
2243
+ case QVariant::Map:
2244
+ {
2245
+ QString v = QgsJSONUtils::encodeValue ( value );
2246
+
2247
+ // do we need CDATA
2248
+ if ( v.indexOf ( ' <' ) != -1 || v.indexOf ( ' &' ) != -1 )
2249
+ {
2250
+ v.prepend ( " <![CDATA[" ).append ( " ]]>" );
2251
+ }
2252
+
2253
+ return v;
2254
+ }
2255
+
2256
+ default :
2257
+ case QVariant::String:
2258
+ {
2259
+ QString v = value.toString ();
2260
+
2261
+ // do we need CDATA
2262
+ if ( v.indexOf ( ' <' ) != -1 || v.indexOf ( ' &' ) != -1 )
2263
+ {
2264
+ v.prepend ( " <![CDATA[" ).append ( " ]]>" );
2265
+ }
2266
+
2267
+ return v;
2268
+ }
2269
+ }
2270
+ }
2271
+
2224
2272
QString QgsWFSServer::serviceUrl () const
2225
2273
{
2226
2274
QUrl mapUrl ( getenv ( " REQUEST_URI" ) );
0 commit comments