Skip to content

Commit

Permalink
[Server][WFS] Define encodeValueToText to correctly format field values
Browse files Browse the repository at this point in the history
  • Loading branch information
rldhont committed Sep 26, 2018
1 parent 6de6c08 commit cfddac5
Showing 1 changed file with 46 additions and 2 deletions.
48 changes: 46 additions & 2 deletions src/server/services/wfs/qgswfsgetfeature.cpp
Expand Up @@ -62,6 +62,8 @@ namespace QgsWfs

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

QString encodeValueToText( const QVariant &value );

QDomElement createFeatureGML2( QgsFeature *feat, QDomDocument &doc, const createFeatureParams &params, const QgsProject *project );

QDomElement createFeatureGML3( QgsFeature *feat, QDomDocument &doc, const createFeatureParams &params, const QgsProject *project );
Expand Down Expand Up @@ -1338,7 +1340,7 @@ namespace QgsWfs
QString attributeName = fields.at( idx ).name();

QDomElement fieldElem = doc.createElement( "qgs:" + attributeName.replace( ' ', '_' ).replace( cleanTagNameRegExp, QString() ) );
QDomText fieldText = doc.createTextNode( featureAttributes[idx].toString() );
QDomText fieldText = doc.createTextNode( encodeValueToText( featureAttributes[idx] ) );
fieldElem.appendChild( fieldText );
typeNameElement.appendChild( fieldElem );
}
Expand Down Expand Up @@ -1433,15 +1435,57 @@ namespace QgsWfs
QString attributeName = fields.at( idx ).name();

QDomElement fieldElem = doc.createElement( "qgs:" + attributeName.replace( ' ', '_' ).replace( cleanTagNameRegExp, QString() ) );
QDomText fieldText = doc.createTextNode( featureAttributes[idx].toString() );
QDomText fieldText = doc.createTextNode( encodeValueToText( featureAttributes[idx] ) );
fieldElem.appendChild( fieldText );
typeNameElement.appendChild( fieldElem );
}

return featureElement;
}

QString encodeValueToText( const QVariant &value )
{
if ( value.isNull() )
return QStringLiteral( "null" );

switch ( value.type() )
{
case QVariant::Int:
case QVariant::UInt:
case QVariant::LongLong:
case QVariant::ULongLong:
case QVariant::Double:
return value.toString();

case QVariant::Bool:
return value.toBool() ? QStringLiteral( "true" ) : QStringLiteral( "false" );

case QVariant::StringList:
case QVariant::List:
case QVariant::Map:
{
QString v = QgsJsonUtils::encodeValue( value );

//do we need CDATA
if ( v.indexOf( '<' ) != -1 || v.indexOf( '&' ) != -1 )
v.prepend( QStringLiteral( "<![CDATA[" ) ).append( QStringLiteral( "]]>" ) );

return v;
}

default:
case QVariant::String:
{
QString v = value.toString();

//do we need CDATA
if ( v.indexOf( '<' ) != -1 || v.indexOf( '&' ) != -1 )
v.prepend( QStringLiteral( "<![CDATA[" ) ).append( QStringLiteral( "]]>" ) );

return v;
}
}
}


} // namespace
Expand Down

0 comments on commit cfddac5

Please sign in to comment.