101 QDomNodeList fidNodes = filterElem.elementsByTagName( QStringLiteral(
"FeatureId" ) );
102 QDomNodeList goidNodes = filterElem.elementsByTagName( QStringLiteral(
"GmlObjectId" ) );
103 if ( !fidNodes.isEmpty() )
106 QStringList collectedServerFids;
108 for (
int f = 0; f < fidNodes.size(); f++ )
110 fidElem = fidNodes.at( f ).toElement();
111 if ( !fidElem.hasAttribute( QStringLiteral(
"fid" ) ) )
116 QString serverFid = fidElem.attribute( QStringLiteral(
"fid" ) );
117 if ( serverFid.contains( QLatin1String(
"." ) ) )
119 if ( serverFid.section( QStringLiteral(
"." ), 0, 0 ) != typeName )
121 serverFid = serverFid.section( QStringLiteral(
"." ), 1, 1 );
123 collectedServerFids << serverFid;
126 if ( collectedServerFids.isEmpty() )
131 serverFids.append( collectedServerFids );
135 else if ( !goidNodes.isEmpty() )
138 QStringList collectedServerFids;
139 QDomElement goidElem;
140 for (
int f = 0; f < goidNodes.size(); f++ )
142 goidElem = goidNodes.at( f ).toElement();
143 if ( !goidElem.hasAttribute( QStringLiteral(
"id" ) ) && !goidElem.hasAttribute( QStringLiteral(
"gml:id" ) ) )
148 QString serverFid = goidElem.attribute( QStringLiteral(
"id" ) );
149 if ( serverFid.isEmpty() )
150 serverFid = goidElem.attribute( QStringLiteral(
"gml:id" ) );
151 if ( serverFid.contains( QLatin1String(
"." ) ) )
153 if ( serverFid.section( QStringLiteral(
"." ), 0, 0 ) != typeName )
155 serverFid = serverFid.section( QStringLiteral(
"." ), 1, 1 );
157 collectedServerFids << serverFid;
160 if ( collectedServerFids.isEmpty() )
165 serverFids.append( collectedServerFids );
169 else if ( filterElem.firstChildElement().tagName() == QLatin1String(
"BBOX" ) )
171 QDomElement bboxElem = filterElem.firstChildElement();
172 QDomElement childElem = bboxElem.firstChildElement();
174 while ( !childElem.isNull() )
176 if ( childElem.tagName() == QLatin1String(
"Box" ) )
180 else if ( childElem.tagName() != QLatin1String(
"PropertyName" ) )
186 childElem = childElem.nextSiblingElement();
193 else if ( filterElem.firstChildElement().tagName() == QLatin1String(
"And" ) && !filterElem.firstChildElement().firstChildElement( QLatin1String(
"BBOX" ) ).isNull() )
195 int nbChildElem = filterElem.firstChildElement().childNodes().size();
198 QDomElement childFilterElement = filterElem.ownerDocument().createElement( QLatin1String(
"Filter" ) );
199 if ( nbChildElem > 2 )
201 QDomElement childAndElement = filterElem.ownerDocument().createElement( QLatin1String(
"And" ) );
202 childFilterElement.appendChild( childAndElement );
206 QDomElement bboxFilterElement = filterElem.ownerDocument().createElement( QLatin1String(
"Filter" ) );
208 QDomElement childElem = filterElem.firstChildElement().firstChildElement();
209 while ( !childElem.isNull() )
212 if ( childElem.tagName() == QLatin1String(
"BBOX" ) )
215 bboxFilterElement.appendChild( childElem.cloneNode(
true ) );
220 if ( nbChildElem > 2 )
222 childFilterElement.firstChildElement().appendChild( childElem.cloneNode(
true ) );
226 childFilterElement.appendChild( childElem.cloneNode(
true ) );
229 childElem = childElem.nextSiblingElement();
233 QStringList collectedServerFids;
250 if ( !collectedServerFids.isEmpty() )
252 serverFids.append( collectedServerFids );
271 if ( filter->hasParserError() || !filter->parserErrorString().isEmpty() )
276 if ( filter->needsGeometry() )
The Context struct stores the current layer and coordinate transform context.