Skip to content

Commit cfddac5

Browse files
committed
[Server][WFS] Define encodeValueToText to correctly format field values
1 parent 6de6c08 commit cfddac5

File tree

1 file changed

+46
-2
lines changed

1 file changed

+46
-2
lines changed

src/server/services/wfs/qgswfsgetfeature.cpp

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ namespace QgsWfs
6262

6363
QString createFeatureGeoJSON( QgsFeature *feat, const createFeatureParams &params );
6464

65+
QString encodeValueToText( const QVariant &value );
66+
6567
QDomElement createFeatureGML2( QgsFeature *feat, QDomDocument &doc, const createFeatureParams &params, const QgsProject *project );
6668

6769
QDomElement createFeatureGML3( QgsFeature *feat, QDomDocument &doc, const createFeatureParams &params, 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

Comments
 (0)