Я впервые использую XML, и в настоящее время я пытаюсь вернуть целое число (на самом деле хочу вернуть двойное число, но еще не зашло так далеко) из XML-файла с использованием С++. Я использую RAPIDXML и следующую реализацию:
Все файлы находятся в одном каталоге.
XML (firstxml.xml):
<?xml version="1.0"?>
<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="firstxsd.xsd">
<A>10</A>
<B>Hello</B>
</test>
XML-схема (firstxsd.xsd):
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="test">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:integer" name="A"/>
<xs:element type="xs:string" name="B"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
С++ (test.cxx):
#include <iostream>
#include <sstream>
#include <fstream>
#include "rapidxml-1.13/rapidxml.hpp"
#include "rapidxml-1.13/rapidxml_print.hpp"
#include <string>
#include <stdio.h>
#include <vector>
int main(int argc, char* argv[])
{
std::ifstream file ("firstxml.xml");
if (file.is_open())
{
file.seekg(0,std::ios::end);
int size = file.tellg();
file.seekg(0,std::ios::beg);
char* buffer = new char [size];
file.read (buffer, size);
file.close();
rapidxml::xml_document<> doc;
doc.parse<0>(buffer);
rapidxml::xml_node<> *node = doc.first_node()->first_node();
//Line which results in error
std::cout << node->value()*10 << std::endl;
delete[] buffer;
}
}
Ошибка:
test.cxx:52:31: error: invalid operands of types ‘char*’ and ‘int’ to binary ‘operator*’
Из руководств, которые я прочитал в Интернете, я считаю, что правильно создаю файлы, поэтому значение, проанализированное в файле C++ из узла A, должно быть целым числом. Я заметил одну вещь: в руководстве по RAPIDXML спецификация value() выглядит следующим образом:
Ch* value() const;
Description: Gets value of node. Interpretation of value depends on type of node. Note that value will not be zero-terminated if rapidxml::parse_no_string_terminators option was selected during parse. Use value_size() function to determine length of the value.
Returns: Value of node, or empty string if node has no value.
Таким образом, определение функции говорит, что она всегда возвращает указатель на символ, но строка «Интерпретация значения зависит от типа узла» подразумевает, что она возвращает значение, зависящее от типа.
Спасибо, что нашли время, чтобы посмотреть на мою проблему, любая помощь очень ценится,
Павел.
value()
, которая возвращает что-то еще, если только вы не добавите дополнительные аргументы, позволяющие С++ видеть их как разные (шаблоны — это другое, но, по-видимому, здесь не используется) . - person hyde   schedule 26.02.2013