LINUX.ORG.RU

RapidXML найти ноду

 ,


0

1

Необходимо найти ноду по имени, как это сделать?
Есть такой файл:

<?xml version="1.0" encoding="UTF-8" ?>
<node attribute="RapidXML 1"/>
<node attribute0="RapidXML 2"/>
<node attribute="RapidXML 3"/>
<mapsound file="3.ogg"/>
<node attribute="RapidXML 4"/>

Пытаюсь спарсить так:
string readXml() {
xml_document<> doc;
ifstream file("test.xml");
stringstream buffer;
buffer << file.rdbuf();
string content(buffer.str());
doc.parse<0>(&content[0]);
string fn = "none";
for (int i= 0; i < doc.value_size(); i++) {
	if (doc.first_node("mapsound",i)) {
		fn = doc.first_node("mapsound",i)->first_attribute("file")->value();
	}
} return fn;
};
Но увы, кроме «none» ничего не выдает, хотя должен найти ноду mapsound и вывести аттрибут.



Последнее исправление: makeB (всего исправлений: 1)

То есть, необходимо найти ноду по имени, не зная ни вложенности, ни конкретного индекса, только по имени.

makeB
() автор топика

попринти doc.value_size() и doc.first_node(«mapsound»,i)->name()

а то вдруг оно и в цикл не зашло

x0r ★★★★★
()

for (int i= 0; i < doc.value_size(); i++) {
if (doc.first_node(«mapsound»,i)) {

facepalm.ogv, читай доку - что такое doc.value_size и какие параметры у first_node

wota ★★
()

Спасибо, разобрался:

string readXml() {
xml_document<> doc;
ifstream file("test.xml");
stringstream buffer;
buffer << file.rdbuf();
string content(buffer.str());
doc.parse<0>(&content[0]);
string fn = "none";
xml_node<> *node = doc.first_node("scene");
for (xml_node<> *attr = node->first_node("sound"); attr; attr = attr->next_sibling()) {
	if (attr->first_attribute("file"))
	fn= attr->first_attribute()->value();
} return fn;
};
если файл такой:
<?xml version="1.0" encoding="UTF-8" ?>
<scene>
<node attribute="RapidXML 1"/>
<node attribute0="RapidXML 2"/>
<node attribute="RapidXML 3"/>
<node attribute="RapidXML 4"/>
<sound file="3.ogg"/>
<node attribute="RapidXML 3"/>
<node attribute="RapidXML 4"/>
</scene>

makeB
() автор топика
<?xml version="1.0" encoding="UTF-8" ?>
<node attribute="RapidXML 1"/>
<node attribute0="RapidXML 2"/>
<node attribute="RapidXML 3"/>
<mapsound file="3.ogg"/>
<node attribute="RapidXML 4"/>

Это не XML :}

Deleted
()
Ответ на: комментарий от makeB

сударь, вероятно вам намекают, что нема корневого узла, в этом случае парсер вообще не обязан что-либо выдавать

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.