У кого компилируется PugXML под VC9?
От: Basil2 Россия https://starostin.msk.ru
Дата: 19.08.09 09:01
Оценка:
Искал легкий парсер XML, очень понравился Pug. Но он зараза не компилируется . Ошибки с i в цикле я еще могу исправить директивой, а остальные нет (там что-то с TCHAR, эта тема мимо меня прошла и я даже не знаю что это за "широкий" char).

Вопрос: кто смог использовать PugXML под VC9? Как?

Исходники лежат на http://www.codeproject.com/soap/pugxml.asp.
TinyXML не предлагать.
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Re: У кого компилируется PugXML под VC9?
От: _Dreamer Россия  
Дата: 19.08.09 09:34
Оценка:
Здравствуйте, Basil2, Вы писали:

B>Искал легкий парсер XML, очень понравился Pug. Но он зараза не компилируется . Ошибки с i в цикле я еще могу исправить директивой, а остальные нет (там что-то с TCHAR, эта тема мимо меня прошла и я даже не знаю что это за "широкий" char).


а чем же он Вам так понравился, если даже не собрался ?
на самом деле, там должно хватить вот такого
#include <tchar.h>

#include "pugxml.h"


TCHAR это либо char, либо wchar_t, в зависимости от макроса UNICODE

хотя код, на мой взгляд, довольно непрозрачен.
возможно, он очень быстрый, на первый взгляд, там есть некоторые оптимизации.
но разбираться там — мне бы не понравилось. к тому же, есть даже на первый взгляд моменты, типа
HANDLE file_handle = CreateFile(path,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(file_handle == INVALID_HANDLE_VALUE) return false;
TCHAR* temp = (TCHAR*) malloc(sizeof(TCHAR)*tempsize);
if(!temp) return false; // про CloseHandle волшебно забыли


нехорошо это, по моему.
Re[2]: У кого компилируется PugXML под VC9?
От: Basil2 Россия https://starostin.msk.ru
Дата: 20.08.09 06:51
Оценка:
Здравствуйте, _Dreamer, Вы писали:

_D>а чем же он Вам так понравился, если даже не собрался ?

Интерфейсом.

_D>на самом деле, там должно хватить вот такого

_D>
_D>#include <tchar.h>
_D>#include "pugxml.h"
_D>

Не хватит — компилятор видит TCHAR, но не может его сконвертить в char/string etc.

_D>TCHAR это либо char, либо wchar_t, в зависимости от макроса UNICODE

Спасибо.

_D>
_D>HANDLE file_handle = CreateFile(path,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
_D>if(file_handle == INVALID_HANDLE_VALUE) return false;
_D>TCHAR* temp = (TCHAR*) malloc(sizeof(TCHAR)*tempsize);
_D>if(!temp) return false; // про CloseHandle волшебно забыли
_D>

_D>нехорошо это, по моему.
Нехорошо, хотя у меня ни разу в жизни malloc не проваливался и, дай бог, не провалится

Окей, если вы не любите Pug может тогда подскажите, как сделать чтобы TinyXml:
1. Для итератора по тегам (с определенным именем) шел вглубь иерархии, а не только но текущему уровню.
2. Для того же итератора шел то тегам без учета регистра
3. Доставал атрибуты без учета регистра.

(Пункты 1 и 2 в принципе можно реализовать руками, отказавшись от именованного итератора. А вот как реализовать 3, не лезя в код и не ища где там аналог strcmp, мне очень интересно).
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Re[3]: У кого компилируется PugXML под VC9?
От: _Dreamer Россия  
Дата: 20.08.09 09:08
Оценка:
Здравствуйте, Basil2, Вы писали:

B>Не хватит — компилятор видит TCHAR, но не может его сконвертить в char/string etc.

попробовал, схватился за голову.
там используется тип TCHAR одновременно с std::string, вместо std::basic_string<TCHAR>.
если заменить std::string на std::basic_string<TCHAR>, то оно компилится. это же надо было так умудриться сделать...

B>Нехорошо, хотя у меня ни разу в жизни malloc не проваливался и, дай бог, не провалится

ну оно конечно, просто там может быть еще что-то, может быть и посерьезней.

B>Окей, если вы не любите Pug может тогда подскажите, как сделать чтобы TinyXml:

B>1. Для итератора по тегам (с определенным именем) шел вглубь иерархии, а не только но текущему уровню.
B>2. Для того же итератора шел то тегам без учета регистра
B>3. Доставал атрибуты без учета регистра.

да нет, я его(Pug) впервые видел, ничего против не имею, по большому счету.
пункт первый — это по сути, descendant из XPath ( xpath 1.0 axis ).
с остальными — это библиотека должна поддерживать передачу компараторов, если в Pug это есть, а в TinyXML нет, так и карты в руки.
лично я давно сколотил себе велосипед, именно после работы с Tiny.
он умеет урезанный XPath, разные итераторы и допиливаю его при надобности.

Вам может, нужен просто более крутой парсер ? их вроде много, типа expat и прочего.
Re[3]: У кого компилируется PugXML под VC9?
От: byleas  
Дата: 20.08.09 21:36
Оценка:
По поводу "без учета регистра" — это разве входит в стандарт XML? Вопрос из интереса. Ну и зачем оно понадобилось.
Re[3]: У кого компилируется PugXML под VC9?
От: BigBan Россия  
Дата: 21.08.09 10:21
Оценка:
Здравствуйте, Basil2, Вы писали:

B>Окей, если вы не любите Pug может тогда подскажите, как сделать чтобы TinyXml:

B>1. Для итератора по тегам (с определенным именем) шел вглубь иерархии, а не только но текущему уровню.
B>2. Для того же итератора шел то тегам без учета регистра
B>3. Доставал атрибуты без учета регистра.

Проход по элементам без учета регистра на TinyXML можно так реализовать, пишем две вспомогательные функции

TiXmlElement* XmlFindFirst(TiXmlElement *pElement, const char *name)
{
    TiXmlElement *element = pElement->FirstChildElement();

    for ( ; element; element = element->NextSiblingElement())
    {
        if (strcmpi(name, element->Value()) == 0)
            return element;
    }

    return NULL;
}

TiXmlElement* XmlFindNext(TiXmlElement *pElement, const char *name)
{
    TiXmlElement *element = pElement->NextSiblingElement();

    for ( ; element; element = element->NextSiblingElement())
    {
        if (strcmpi(name, element->Value()) == 0)
            return element;
    }

    return NULL;
}

и далее вместо стандартных FirstChildElement и NextSiblingElement исползуем их.

и также получение аттрибута без учета регистра.

const char* XmlFindAttribute(TiXmlElement *pElement, const char *name)
{
    TiXmlAttribute *attribute = pElement->FirstAttribute();

    for ( ; attribute; attribute = attribute->Next())
    {
        if (strcmpi(name, attribute->Name()) == 0)
            return attribute->Value();
    }

    return NULL;
}


с помощью этого вполне можно правильно распарсить такой XML
<Main>
    <element attribute="blahblah" />
    <ELEMENT ATTRIBUTE="blahblah" />
    <Element Attribute="blahblah" />
</Main>
Re[4]: У кого компилируется PugXML под VC9?
От: Basil2 Россия https://starostin.msk.ru
Дата: 21.08.09 10:57
Оценка:
Здравствуйте, byleas, Вы писали:

B>По поводу "без учета регистра" — это разве входит в стандарт XML? Вопрос из интереса. Ну и зачем оно понадобилось.

Стандарт подозрительно молчит на этот счет — там почему-то вообще не сказано про регистр имен (я не нашел).

Но судя по тому, что при описании идентификаторов кодировок везде отдельно указывается "case insensitive way", то я предполагаю что имена должны быть как раз case sensitive.

Может, кто знает точнее?
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Re[4]: У кого компилируется PugXML под VC9?
От: Basil2 Россия https://starostin.msk.ru
Дата: 21.08.09 10:57
Оценка:
Здравствуйте, _Dreamer, Вы писали:

_D>там используется тип TCHAR одновременно с std::string, вместо std::basic_string<TCHAR>.

_D>если заменить std::string на std::basic_string<TCHAR>, то оно компилится. это же надо было так умудриться сделать...
Спасибо, так действительно компиляется.

_D>Вам может, нужен просто более крутой парсер ? их вроде много, типа expat и прочего.

Точно не нужен, имеющийся бы освоить
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Re: У кого компилируется PugXML под VC9?
От: AGovorovsky  
Дата: 21.08.09 12:44
Оценка: +1
Здравствуйте, Basil2, Вы писали:

B>Исходники лежат на http://www.codeproject.com/soap/pugxml.asp.

B>TinyXML не предлагать.
попробуй http://code.google.com/p/pugixml/
Re[5]: У кого компилируется PugXML под VC9?
От: byleas  
Дата: 21.08.09 15:13
Оценка:
Здравствуйте, Basil2, Вы писали:

B>Может, кто знает точнее?

Which parts of an XML document are case-sensitive?
Re[6]: У кого компилируется PugXML под VC9?
От: Basil2 Россия https://starostin.msk.ru
Дата: 24.08.09 14:54
Оценка:
Здравствуйте, byleas, Вы писали:

B>>Может, кто знает точнее?

B>Which parts of an XML document are case-sensitive?
Спасибо!!
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.