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>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.