XMLを使用するのは初めてで、現在C ++を使用してXMLファイルから整数を返そうとしています(実際にはdoubleを返したいのですが、まだそれほど遠くはありません)。私は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>
C ++(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*’
私がオンラインで読んだチュートリアルから、私はファイルを正しく構築していると信じているので、ノードAからC++ファイルに解析される値は整数である必要があります。私が気づいたことの1つは、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.
したがって、関数定義は常に文字ポインタを返すと言っていますが、「値の解釈はノードのタイプに依存します」という行は、タイプに依存する値を返すことを意味します。
私の問題をご覧いただきありがとうございます。どんな助けでも大歓迎です、
ポール。