Здравствуйте, 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>