Всем привет ! Как можно разобрать xml в c++ под unix например Code: char xml = " <root> <item> <a>Helo !!!</a> </item> </root> "; вытащить "Helo !!" ?
Вообще существует не мало либ, для работы с XML... К примеру вот: http://xerces.apache.org/index.html http://www.chilkatsoft.com/xml-library.asp CdataClass -> http://www.firstobject.com/dn_dataedit.htm http://www.firstobject.com/dn_editor.htm - программка с исходным кодом, можно глянуть исходники
советую pugixml использовать так Code: #include <iostream> #include "pugixml.hpp" using namespace pugi; using namespace std; int main(int argc, char *argv[]) { xml_document doc; char xml[] = "<root><item><a>Hello world!</a></item></root>"; doc.load(xml); xml_node item = doc.child("root").child("item").child("a"); cout << item.child_value(); // Hello world! return 0; } удачи
Спасибо ! Проблема такая скачал я эту штуку папку src/ кинул на сервер компелю g++ xml.cpp -o xml выдает Code: /var/tmp//ccS1gZxe.o(.text+0x1bf): In function `main': : undefined reference to `pugi::xml_document::xml_document()' /var/tmp//ccS1gZxe.o(.text+0x246): In function `main': : undefined reference to `pugi::xml_document::load(char const*, unsigned int)' /var/tmp//ccS1gZxe.o(.text+0x25f): In function `main': : undefined reference to `pugi::xml_node::child(char const*) const' /var/tmp//ccS1gZxe.o(.text+0x275): In function `main': : undefined reference to `pugi::xml_node::child(char const*) const' /var/tmp//ccS1gZxe.o(.text+0x28b): In function `main': : undefined reference to `pugi::xml_node::child(char const*) const' /var/tmp//ccS1gZxe.o(.text+0x299): In function `main': : undefined reference to `pugi::xml_node::child_value() const' /var/tmp//ccS1gZxe.o(.text+0x2bc): In function `main': : undefined reference to `pugi::xml_document::~xml_document()' /var/tmp//ccS1gZxe.o(.text+0x2de): In function `main': : undefined reference to `pugi::xml_document::~xml_document()' что это может быть ?
malik555, так ты компилмшь только xml.cpp, а надо еще и pugixml.cpp. т.е. так g++ xml.cpp pugixml.cpp -o xml да и #include "pugixml.hpp" - это в случае если этот файл лежит в одной папке с xml.cpp. Если у тебя в src, тогда нужно "/src/pugixml.cpp"
Спасиб все пашет ! только pugixml.cpp:25:29: warning: missing terminating ' character что-то вылетает ! А если например нужно изминить "Helo !!!" в переменной xml Code: char xml[] = "<root><item><a>Hello !!!</a></item></root>"; что-б осталясь структура xml можно как-то ?
Не совсем понял тебя Code: char xml[] = "<root><item><a>Hello!!!</a></item></root>"; doc.load(xml); xml_node item = doc.child("root").child("item").child("a").first_child(); cout << item.value() << endl; // Hello!!! item.set_value("text"); cout << item.value() << endl; // text doc.print(cout); /* выведет xml-код <root> <item> <a>Goodbye!!!</a> </item> </root> */ там в архиве есть файл с примерами, можешь посмотреть там возможности либы )
То что нужно ! Спасибо ! классная либа - работать одно удовольствие ! Хотел тебе +1 добавить - но что-то не получается (наверное у меня репа 0) поэтому не выходит !
Code: #include <iostream> #include "lib/xml/pugixml.hpp" using namespace pugi; using namespace std; int main() { xml_document doc; char xml[] = "<root><item><a>1111</a><b>2222</b></item></root>"; doc.load(xml); xml_node item = doc.child("root").child("item").child("b").first_child(); string d = item.value(); /* * получается данные я могу считать только в * переменную с типом string ! * А мне дальше нужно эту переменую "d" умножить / разделить * как ее можно из string в int ? * */ /* * А записать ответ назад в xml можно только char * получается ее еше нужно и в char переводить * * Как правельно сделать ? * */ item.set_value(d); doc.print(cout); return 0; }
как-то так Code: char *d = (char *)item.value(); int c = atoi(d); char str[16]; itoa(c, str, 10); item.set_value(str);
У меня itoa(); вобще не хочет работать Заголовочные файлы #include<stdlib.h> выдает 'itoa' was not declared in this scope
открываешь Solution Explorer (Ctrl + Alt + L) и перетягиваешь в Source Files файл pugixml.cpp. И всё )
это для visual studio 2008. По сути во всех версиях есть список файлов проекта. Посмотри в меню View->Solution Explorer.
Спасибо ! У меня visual c++ 6 я так и не нашел Solution Explorer - тут по другому сделал вобщем работает !