Example #1
0
void RssFetcher::parseXml(QIODevice *device)
{
    QXmlStreamReader xmlReader(device);

    TagElement currentTag = otherElement;
    RssItem item;
    while (!xmlReader.atEnd()) {
        switch (xmlReader.readNext()) {
        case QXmlStreamReader::StartElement:
            currentTag = tagElement(xmlReader.name(), currentTag);
            if (currentTag == itemElement) {
                item = RssItem();
            }
            break;
            case QXmlStreamReader::EndElement:
            if (xmlReader.name() == QLatin1String("item")) {
                m_items++;
                if ((uint)m_items > (uint)m_maxItems)
                    return;
                emit newsItemReady(item.title, item.description, item.url);
                emit rssItemReady(item);
            }
            break;
            case QXmlStreamReader::Characters:
            if (!xmlReader.isWhitespace()) {
                switch (currentTag) {
                case titleElement:
                    item.title += xmlReader.text().toString();
                    break;
                case descriptionElement:
                    item.description += xmlReader.text().toString();
                    break;
                case categoryElement:
                    item.category += xmlReader.text().toString();
                    break;
                case linkElement:
                    item.url += xmlReader.text().toString();
                    break;
                case imageLinkElement:
                    item.imagePath += xmlReader.text().toString();
                    break;
                default:
                    break;
                }
            } // !xmlReader.isWhitespace()
            break;
            default:
            break;
        }
    }
    if (xmlReader.error() && xmlReader.error() != QXmlStreamReader::PrematureEndOfDocumentError) {
        qWarning("Welcome::Internal::RSSFetcher: XML ERROR: %d: %s (%s)",
                 int(xmlReader.lineNumber()),
                 qPrintable(xmlReader.errorString()),
                 qPrintable(item.title));
    }
}
Example #2
0
// TODO: separate tag parsing
void buildNodes(xmlNodePtr root_node, MULTIPOINT pts, SHAPE *shape) 
{
	int i, k = 0;
	int l;
	char val[1024];

	xmlNodePtr osmNode;
	NODE node;
	KEYVAL tags;

	initList(&tags);

	int j = 0 - pts.num_points;

	// negative ids required for new osm nodes
	for (i = -1; i > j; i--)
	{
		node.id = i;
		node.x = pts.points[k].x;
		node.y = pts.points[k].y;

		osmNode = nodeElement(node);

		if (shape->num_fields > 0)
		{
			// has tags
			for (l = 0; l < shape->num_fields; l++)
			{
				setKey(&tags, getValue(&shape->fields[l]));

				// set tag value
				snprintf(val, 1024, "%s", DBFReadStringAttribute(shape->handleDbf, k, l));
				setValue(&tags, val);

				xmlAddChild(osmNode, tagElement(&tags));
			}
		}
 
		xmlAddChild(root_node, osmNode);

		k++;
	}

}
Example #3
0
void parseLine(xmlNodePtr root_node, SHAPE *shape)
{
	int i, l, m, v;
	int k = 0;
	int n = -1;
	int o = -1;

	int start_vertex, end_vertex;
	char val[1024];

	xmlNodePtr osmWay;
	SHPObject *obj = NULL;
	NODE node;
	KEYVAL tags;

	for (i = 0; i < shape->num_entities; i++)
	{
		obj = SHPReadObject(shape->handleShp, k);

		for (m = 0; m < obj->nParts; m++) 
		{
			osmWay = wayElement(o);
			
			if (m == obj->nParts-1)
			{
				// is linestring
				end_vertex = obj->nVertices;
			} else {
				// is multilinestring
				end_vertex = obj->panPartStart[m+1];
			}

			start_vertex = obj->panPartStart[m];

			for (v = start_vertex; v < end_vertex; v++)
			{
				node.id = n;
				node.x = obj->padfX[v];
				node.y = obj->padfY[v];
				xmlAddChild(root_node, nodeElement(node));
				xmlAddChild(osmWay, nodeRef(node));
				n--;
			}

			if (shape->num_fields > 0)
			{
				// has tags
				for (l = 0; l < shape->num_fields; l++)
				{
					setKey(&tags, shape->field_names[l]);

					// set tag value
					snprintf(val, 1024, "%s", DBFReadStringAttribute(shape->handleDbf, k, l));
					setValue(&tags, val);

					xmlAddChild(osmWay, tagElement(&tags));
				}
			}

			xmlAddChild(root_node, osmWay);
			o--;
		}

		k++;
	}
}