Manujaya Premathilaka Ответов: 2

Rapidxml parse выдает ошибку!


Я пытаюсь прочитать XML-файл с помощью c++ в eclipse. Для достижения этой цели я использую библиотеку rapidXML. Но как только я пытаюсь запустить программу, она завершается словами,
terminate called after throwing an instance of 'rapidxml::parse_error'<br />
  what():  expected ' or "


Код:
xml_document<> doc;
xml_node<> * rootNode;

//read the xml file into vector
ifstream xmlFile("Exchange.xml");
xmlFile.unsetf(ios::skipws);
vector<char> buffer ((istreambuf_iterator<char>(xmlFile)), istreambuf_iterator<char>());
buffer.push_back('\0');

//Parse the buffer
doc.parse<0>(&buffer[0]);

//getting the root node
rootNode = doc.first_node("Exchange");

//Iterating through the file
xml_node<> * sourceId;

for(sourceId = rootNode->first_node("sourceId"); sourceId; sourceId = sourceId->next_sibling()){
    cout << sourceId->value() << " : " << sourceId->first_attribute("interval")->value() << endl;
}


XML-файл:
<pre><?xml version="1.0" encoding="UTF-8"?>
<Exchange>
	<sourceId interval = 03>ADSM<sourceId/>
	<sourceId interval = 06>ASE<sourceId/>
	<sourceId interval = 09>BSE<sourceId/>
	<sourceId interval = 12>CSAE<sourceId/>
	<sourceId interval = 15>CSE<sourceId/>
	<sourceId interval = 18>TDWL<sourceId/>
</Exchange>


NOTE: The above code is in a single method which calls in the main method. I just want to print the attribute value and the child value of the nodes. How can I solve this? Thank you!


Что я уже пробовал:

Я попробовал использовать метод file<> В rapidxml_util

//read the xml file into vector
file<> xmlFile("Exchange.xml");


//Parse the buffer

doc.parse<0>(xmlFile.data());

2 Ответов

Рейтинг:
7

Shao Voon Wong

Ваш / должно быть перед конечной меткой.

<Exchange>
	<sourceId interval="03">ADSM</sourceId>


Manujaya Premathilaka

спасибо Вам большое спасибо Су! теперь он прекрасно работает!

CPallini

5.

Рейтинг:
17

CPallini

Вообще-то, ничего удивительного. Ваш XML недопустимый.

Цитата:
<обмен>
&ЛТ;идентификатором источника интервал = 03>ADSM<sourceId/>
...

Вокруг имен атрибутов должны быть кавычки.


Manujaya Premathilaka

О, Спасибо! Это решает эту ошибку. И все же я не мог достичь своей цели. Теперь он говорит: "что(): неожиданный конец данных". Как я могу преодолеть это? Еще раз спасибо!