Exemple #1
0
int
printXPathAtomic (xmlXPathObjectPtr objset, char **printBuffPtr, int printBuffSize)
{
	int retValue;
	char *res = NULL;
	int size = printBuffSize;
	char *newSpace;
	int n;

	if (objset == NULL) return -1;
	switch (objset->type){
	case XPATH_STRING:
        res = strdup ((char *)objset->stringval);
        break;
    case XPATH_BOOLEAN:
        res = (char *)xmlXPathCastBooleanToString(objset->boolval);
        break;
    case XPATH_NUMBER:
        res = (char *) xmlXPathCastNumberToString(objset->floatval);
        break;
	}
	if (res == NULL || strlen (res) == 0){
		if (res) free (res);
		return 0;
	}
	if (size < (strlen(res) + 1)){
	    size = strlen(res) + 1;
	    newSpace = (char *)realloc (*printBuffPtr, size);
	    if (newSpace){
	        *printBuffPtr = newSpace;
	    } else {
	        // unable to allocate space
	        if (res) free (res);
	        return -1;
	    }
	}
	n = sprintf (*printBuffPtr, "%s", res);
	if (res) free (res);
	return n;
}
Exemple #2
0
bool gpl::xml::getXPathResultSet(std::multimap<std::string, std::string>& resultSet)
{
	resultSet.clear();
	//added by shandy 20041208
	if (m_xml->resource == NULL)
		return true;

	std::vector<std::string> strVector;
	std::string str, name;
	int i;
	xmlNodeSetPtr tmpPtr = 0;

	//cout<<"resource->type:"<<m_xml->resource->type<<endl;
	switch (m_xml->resource->type)
	{
	case XPATH_UNDEFINED://Object is uninitialized
		return false;
		break;
	case XPATH_NODESET://Object is a Node Set
		tmpPtr = m_xml->resource->nodesetval;
		if (tmpPtr == NULL)
			break;
		for (i = 0; i < tmpPtr->nodeNr; i++)
			m_xml->getDumpNode(tmpPtr->nodeTab[i], resultSet);
		break;
	case XPATH_XSLT_TREE://Object is an XSLT value tree
		return false;
		break;
	case XPATH_BOOLEAN://Object is a Boolean
		str = m_xml->getStringByXmlCharPtr(xmlXPathCastBooleanToString(m_xml->resource->boolval), 1);
		resultSet.insert(std::multimap<std::string, std::string>::value_type(std::string("boolean"), str));
		break;
	case XPATH_NUMBER://Object is a number
		str = m_xml->getStringByXmlCharPtr(xmlXPathCastNumberToString(m_xml->resource->floatval), 1);
		resultSet.insert(std::multimap<std::string, std::string>::value_type(std::string("number"), str));
		break;
	case XPATH_STRING://Object is a string
		if (m_xml->resource->stringval != NULL)
		{
			std::string str = m_xml->getStringByXmlCharPtr(m_xml->resource->stringval);
			resultSet.insert(std::multimap<std::string, std::string>::value_type(std::string("string"), str));
		}
		break;
	case XPATH_POINT://Object is a point
		//fprintf(output, " : index %d in node", m_xml->resource->index);
		m_xml->getDumpNode((xmlNodePtr)m_xml->resource->user, resultSet);
		break;
	case XPATH_RANGE:
		if ((m_xml->resource->user2 == NULL) ||
			((m_xml->resource->user2 == m_xml->resource->user) && (m_xml->resource->index == m_xml->resource->index2)))
		{
			//Object is a collapsed range 
			//if (m_xml->resource->index >= 0)
			//    fprintf(output, "index %d in ", m_xml->resource->index);
			//fprintf(output, "node\n");
			m_xml->getDumpNode((xmlNodePtr)m_xml->resource->user, resultSet);
		}
		else
		{
			//Object is a range from 
			//if (m_xml->resource->index >= 0)
			//    fprintf(output, "index %d in ", m_xml->resource->index);
			m_xml->getDumpNode((xmlNodePtr)m_xml->resource->user, resultSet);
			// to 
			//if (m_xml->resource->index2 >= 0)
			//    fprintf(output, "index %d in ", m_xml->resource->index2);
			m_xml->getDumpNode((xmlNodePtr)m_xml->resource->user2, resultSet);
		}
		break;
	case XPATH_LOCATIONSET://Object is a Location Set
		return false;
		break;
	case XPATH_USERS://Object is user defined
		return false;
		break;
	}
	return true;
}