111    QDomNodeList fidNodes = filterElem.elementsByTagName( QStringLiteral( 
"FeatureId" ) );
 
  112    QDomNodeList goidNodes = filterElem.elementsByTagName( QStringLiteral( 
"GmlObjectId" ) );
 
  113    if ( !fidNodes.isEmpty() )
 
  116      QStringList collectedServerFids;
 
  118      for ( 
int f = 0; f < fidNodes.size(); f++ )
 
  120        fidElem = fidNodes.at( f ).toElement();
 
  121        if ( !fidElem.hasAttribute( QStringLiteral( 
"fid" ) ) )
 
  126        QString serverFid = fidElem.attribute( QStringLiteral( 
"fid" ) );
 
  127        if ( serverFid.contains( QLatin1String( 
"." ) ) )
 
  129          if ( serverFid.section( QStringLiteral( 
"." ), 0, 0 ) != 
typeName )
 
  131          serverFid = serverFid.section( QStringLiteral( 
"." ), 1, 1 );
 
  133        collectedServerFids << serverFid;
 
  136      if ( collectedServerFids.isEmpty() )
 
  141      serverFids.append( collectedServerFids );
 
  145    else if ( !goidNodes.isEmpty() )
 
  148      QStringList collectedServerFids;
 
  149      QDomElement goidElem;
 
  150      for ( 
int f = 0; f < goidNodes.size(); f++ )
 
  152        goidElem = goidNodes.at( f ).toElement();
 
  153        if ( !goidElem.hasAttribute( QStringLiteral( 
"id" ) ) && !goidElem.hasAttribute( QStringLiteral( 
"gml:id" ) ) )
 
  158        QString serverFid = goidElem.attribute( QStringLiteral( 
"id" ) );
 
  159        if ( serverFid.isEmpty() )
 
  160          serverFid = goidElem.attribute( QStringLiteral( 
"gml:id" ) );
 
  161        if ( serverFid.contains( QLatin1String( 
"." ) ) )
 
  163          if ( serverFid.section( QStringLiteral( 
"." ), 0, 0 ) != 
typeName )
 
  165          serverFid = serverFid.section( QStringLiteral( 
"." ), 1, 1 );
 
  167        collectedServerFids << serverFid;
 
  170      if ( collectedServerFids.isEmpty() )
 
  175      serverFids.append( collectedServerFids );
 
  179    else if ( filterElem.firstChildElement().tagName() == QLatin1String( 
"BBOX" ) )
 
  181      QDomElement bboxElem = filterElem.firstChildElement();
 
  182      QDomElement childElem = bboxElem.firstChildElement();
 
  184      while ( !childElem.isNull() )
 
  186        if ( childElem.tagName() == QLatin1String( 
"Box" ) )
 
  190        else if ( childElem.tagName() != QLatin1String( 
"PropertyName" ) )
 
  196        childElem = childElem.nextSiblingElement();
 
  203    else if ( filterElem.firstChildElement().tagName() == QLatin1String( 
"And" ) &&
 
  204              !filterElem.firstChildElement().firstChildElement( QLatin1String( 
"BBOX" ) ).isNull() )
 
  206      int nbChildElem = filterElem.firstChildElement().childNodes().size();
 
  209      QDomElement childFilterElement = filterElem.ownerDocument().createElement( QLatin1String( 
"Filter" ) );
 
  210      if ( nbChildElem > 2 )
 
  212        QDomElement childAndElement = filterElem.ownerDocument().createElement( QLatin1String( 
"And" ) );
 
  213        childFilterElement.appendChild( childAndElement );
 
  217      QDomElement bboxFilterElement = filterElem.ownerDocument().createElement( QLatin1String( 
"Filter" ) );
 
  219      QDomElement childElem = filterElem.firstChildElement().firstChildElement();
 
  220      while ( !childElem.isNull() )
 
  223        if ( childElem.tagName() == QLatin1String( 
"BBOX" ) )
 
  226          bboxFilterElement.appendChild( childElem.cloneNode( 
true ) );
 
  231          if ( nbChildElem > 2 )
 
  233            childFilterElement.firstChildElement().appendChild( childElem.cloneNode( 
true ) );
 
  237            childFilterElement.appendChild( childElem.cloneNode( 
true ) );
 
  240        childElem = childElem.nextSiblingElement();
 
  244      QStringList collectedServerFids;
 
  261      if ( !collectedServerFids.isEmpty() )
 
  263        serverFids.append( collectedServerFids );
 
  275      if ( project != 
nullptr )
 
  282        if ( filter->hasParserError() || !filter->parserErrorString().isEmpty() )
 
  287        if ( filter->needsGeometry() )
 
 
The Context struct stores the current layer and coordinate transform context.