Мы приняли Tiny XML в качестве нашего XML-парсера. Я пишу код для извлечения палитр из XML-файла и написал функцию посетителя следующим образом:
PALETTE_PARSER::VisitEnter( const TiXmlElement& Element, const TiXmlAttribute* First Attribute)
{
if( Element.ValueStr() == "palette" )
{
AddPalette( Element );
return( true );
}
else
{
return( false );
}
}
К своему удивлению, я обнаружил, что это проанализировало первый элемент palette
, а затем остановилось. Когда я проверял, в документации говорилось
Если вы вернете true в методе Visit, рекурсивный анализ будет продолжен. Если вы вернетесь
false, дочерние узлы этого узла или его дочерние элементы не будут посещены.
Для меня имеет смысл не разбирать детей, но братья и сестры кажутся мне странными. В чем причина такого поведения? Есть ли способ заставить его делать то, что я хочу?
То есть меня интересуют только элементы палитры, но их может быть несколько (а также другие элементы). Я хотел вернуть false, чтобы пропустить другие типы элементов, а не обрабатывать их рекурсивно, по-прежнему находя все палитры. Поэтому я думаю, что я ищу способ посетить только элементы палитры, полностью игнорируя все остальное.