MCPcopy Index your code
hub / github.com/MapServer/MapServer / FLTInsertElementInNode

Function FLTInsertElementInNode

mapogcfilter.c:818–1520  ·  view source on GitHub ↗

/ FLTInsertElementInNode */ / Utility function to parse an XML node and transfter the */ contennts into the Filer Encoding node structure. */ /

Source from the content-addressed store, hash-verified

816/* contennts into the Filer Encoding node structure. */
817/************************************************************************/
818void FLTInsertElementInNode(FilterEncodingNode *psFilterNode,
819 CPLXMLNode *psXMLNode)
820{
821 int nStrLength = 0;
822 char *pszTmp = NULL;
823 FilterEncodingNode *psCurFilNode= NULL;
824 CPLXMLNode *psCurXMLNode = NULL;
825 CPLXMLNode *psTmpNode = NULL;
826 CPLXMLNode *psFeatureIdNode = NULL;
827 char *pszFeatureId=NULL, *pszFeatureIdList=NULL;
828 char **tokens = NULL;
829 int nTokens = 0;
830
831 if (psFilterNode && psXMLNode && psXMLNode->pszValue)
832 {
833 psFilterNode->pszValue = msStrdup(psXMLNode->pszValue);
834 psFilterNode->psLeftNode = NULL;
835 psFilterNode->psRightNode = NULL;
836
837/* -------------------------------------------------------------------- */
838/* Logical filter. AND, OR and NOT are supported. Example of */
839/* filer using logical filters : */
840/* <Filter> */
841/* <And> */
842/* <PropertyIsGreaterThan> */
843/* <PropertyName>Person/Age</PropertyName> */
844/* <Literal>50</Literal> */
845/* </PropertyIsGreaterThan> */
846/* <PropertyIsEqualTo> */
847/* <PropertyName>Person/Address/City</PropertyName> */
848/* <Literal>Toronto</Literal> */
849/* </PropertyIsEqualTo> */
850/* </And> */
851/* </Filter> */
852/* -------------------------------------------------------------------- */
853 if (FLTIsLogicalFilterType(psXMLNode->pszValue))
854 {
855 psFilterNode->eType = FILTER_NODE_TYPE_LOGICAL;
856 if (strcasecmp(psFilterNode->pszValue, "AND") == 0 ||
857 strcasecmp(psFilterNode->pszValue, "OR") == 0)
858 {
859 if (psXMLNode->psChild && psXMLNode->psChild->psNext)
860 {
861 /*2 operators */
862 if (psXMLNode->psChild->psNext->psNext == NULL)
863 {
864 psFilterNode->psLeftNode = FLTCreateFilterEncodingNode();
865 FLTInsertElementInNode(psFilterNode->psLeftNode,
866 psXMLNode->psChild);
867 psFilterNode->psRightNode = FLTCreateFilterEncodingNode();
868 FLTInsertElementInNode(psFilterNode->psRightNode,
869 psXMLNode->psChild->psNext);
870 }
871 else
872 {
873 psCurXMLNode = psXMLNode->psChild;
874 psCurFilNode = psFilterNode;
875 while(psCurXMLNode)

Callers 1

FLTParseFilterEncodingFunction · 0.85

Calls 15

msStrdupFunction · 0.85
FLTIsLogicalFilterTypeFunction · 0.85
strcasecmpFunction · 0.85
FLTIsSpatialFilterTypeFunction · 0.85
FLTParseGMLBoxFunction · 0.85
FLTParseGMLEnvelopeFunction · 0.85
msSmallMallocFunction · 0.85
msInitShapeFunction · 0.85
FLTShapeFromGMLTreeFunction · 0.85
msStringConcatenateFunction · 0.85

Tested by

no test coverage detected