ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

01.07.2009, 14:12
|
|
Участник форума
Регистрация: 04.02.2009
Сообщений: 132
Провел на форуме: 350627
Репутация:
1
|
|
c++ и xml
Всем привет !
Как можно разобрать xml в c++ под unix
например
Код:
char xml = "
<root>
<item>
<a>Helo !!!</a>
</item>
</root>
";
вытащить "Helo !!" ?
|
|
|

01.07.2009, 14:25
|
|
Участник форума
Регистрация: 03.02.2009
Сообщений: 104
Провел на форуме: 270228
Репутация:
70
|
|
Вообще существует не мало либ, для работы с 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 - программка с исходным кодом, можно глянуть исходники
|
|
|

01.07.2009, 19:58
|
|
Познающий
Регистрация: 23.09.2007
Сообщений: 75
Провел на форуме: 938032
Репутация:
86
|
|
советую 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;
}
удачи (:
|
|
|

01.07.2009, 21:25
|
|
Участник форума
Регистрация: 04.02.2009
Сообщений: 132
Провел на форуме: 350627
Репутация:
1
|
|
Сообщение от 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()'
что это может быть ?
|
|
|

01.07.2009, 21:47
|
|
Познающий
Регистрация: 23.09.2007
Сообщений: 75
Провел на форуме: 938032
Репутация:
86
|
|
malik555, так ты компилмшь только xml.cpp, а надо еще и pugixml.cpp.
т.е. так g++ xml.cpp pugixml.cpp -o xml
да и #include "pugixml.hpp" - это в случае если этот файл лежит в одной папке с xml.cpp. Если у тебя в src, тогда нужно "/src/pugixml.cpp"
Последний раз редактировалось t4Nk; 01.07.2009 в 21:52..
|
|
|

01.07.2009, 22:07
|
|
Участник форума
Регистрация: 04.02.2009
Сообщений: 132
Провел на форуме: 350627
Репутация:
1
|
|
Спасиб все пашет !
только pugixml.cpp:25:29: warning: missing terminating ' character
что-то вылетает !
А если например нужно изминить "Helo !!!" в переменной xml
Код:
char xml[] = "<root><item><a>Hello !!!</a></item></root>";
что-б осталясь структура xml можно как-то ?
|
|
|

01.07.2009, 22:36
|
|
Познающий
Регистрация: 23.09.2007
Сообщений: 75
Провел на форуме: 938032
Репутация:
86
|
|
Не совсем понял тебя
Код:
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>
*/
там в архиве есть файл с примерами, можешь посмотреть там возможности либы )
|
|
|

01.07.2009, 23:03
|
|
Участник форума
Регистрация: 04.02.2009
Сообщений: 132
Провел на форуме: 350627
Репутация:
1
|
|
Сообщение от 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) поэтому не выходит !
|
|
|

02.07.2009, 01:12
|
|
Участник форума
Регистрация: 04.02.2009
Сообщений: 132
Провел на форуме: 350627
Репутация:
1
|
|
Код:
#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;
}
|
|
|

02.07.2009, 01:31
|
|
Познающий
Регистрация: 23.09.2007
Сообщений: 75
Провел на форуме: 938032
Репутация:
86
|
|
как-то так
Код:
char *d = (char *)item.value();
int c = atoi(d);
char str[16];
itoa(c, str, 10);
item.set_value(str);
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|