/ FLTInsertElementInNode */ / Utility function to parse an XML node and transfter the */ contennts into the Filer Encoding node structure. */ /
| 816 | /* contennts into the Filer Encoding node structure. */ |
| 817 | /************************************************************************/ |
| 818 | void 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) |
no test coverage detected