Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   c++ и xml (https://forum.antichat.xyz/showthread.php?t=127807)

malik555 01.07.2009 14:12

c++ и xml
 
Всем привет !


Как можно разобрать xml в c++ под unix

например

Код:


char  xml =  "
                    <root>
                        <item>
                          <a>Helo !!!</a>
                        </item>
                    </root>
                    ";

вытащить "Helo !!" ?

[n]-c0der 01.07.2009 14:25

Вообще существует не мало либ, для работы с 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 - программка с исходным кодом, можно глянуть исходники

t4Nk 01.07.2009 19:58

советую pugixml

использовать так
Код:

#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;
}

удачи (:

malik555 01.07.2009 21:25

Цитата:

Сообщение от t4Nk
советую pugixml

использовать так
Код:

#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

выдает

Код:


/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()'

что это может быть ?

t4Nk 01.07.2009 21:47

malik555, так ты компилмшь только xml.cpp, а надо еще и pugixml.cpp.
т.е. так g++ xml.cpp pugixml.cpp -o xml

да и #include "pugixml.hpp" - это в случае если этот файл лежит в одной папке с xml.cpp. Если у тебя в src, тогда нужно "/src/pugixml.cpp"

malik555 01.07.2009 22:07

Спасиб все пашет !

только pugixml.cpp:25:29: warning: missing terminating ' character

что-то вылетает !


А если например нужно изминить "Helo !!!" в переменной xml

Код:


char xml[] = "<root><item><a>Hello !!!</a></item></root>";

что-б осталясь структура xml можно как-то ?

t4Nk 01.07.2009 22:36

Не совсем понял тебя
Код:

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>
*/

там в архиве есть файл с примерами, можешь посмотреть там возможности либы )

malik555 01.07.2009 23:03

Цитата:

Сообщение от t4Nk
Не совсем понял тебя
Код:

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) поэтому не выходит !

malik555 02.07.2009 01:12

Код:


#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;
   
}


t4Nk 02.07.2009 01:31

как-то так
Код:

char *d = (char *)item.value();

int c = atoi(d);
char str[16];
itoa(c, str, 10);

item.set_value(str);



Время: 10:43