Преимущество CSS - то, что он разделяет дизайн и расположение от содержания.
, Если у Вас есть табличные данные тогда, имеет смысл использовать <TABLE>
тег. Если Вы хотите к расположению различные блоки содержания тогда, необходимо использовать <DIV>
или <SPAN>
и CSS.
ParseEntry получает ссылку на каждый из дочерних узлов текущего уровня. Таким образом, вы не можете запрашивать значения, используя имя узла, потому что у вас уже есть дочерний узел. Имя узла хранится в v.first .
Вы можете перебирать все элементы на заданном уровне, используя get_child для выбора уровня, а затем BOOST_FOREACH ] для итерации. Каждый итератор представляет собой пару, представляющую имя узла и данные узла:
using boost::property_tree::wiptree;
wiptree &iterationLevel = bifPropTree.get_child(L"VGHL.StringTable");
BOOST_FOREACH(wiptree::value_type &v, iterationLevel)
{
wstring name = v.first;
wstring value = v.second.get<wstring>(L"");
wcout << L"Name: " << name << L", Value: " << value.c_str() << endl;
}
Этот код будет печатать:
Имя: Язык, Значение: EN
Имя: DataPath, Значение: .. \\ Data \ \ Resources \\ Strings \\ stringtable.bst
Если вы не хотите выполнять итерацию, вы можете выбрать уровень узла, а затем искать узлы по их имени:
wiptree &iterationLevel = bifPropTree.get_child(L"VGHL.StringTable");
wstring valueLang = iterationLevel.get<wstring>(L"Language");
wstring valuePath = iterationLevel.get<wstring>(L"DataPath");
wcout << valueLang << endl << valuePath << endl;
Этот код будет печатать:
EN
.. \\ Data \\ Resources \\ Strings \\ stringtable.bst
Я не использовал дерево свойств, но, вероятно, буду использовать его, поскольку оно выглядит красиво. Однако несколько быстрых наблюдений:
Разве параметр шаблона для get не должен совпадать с типом возвращаемого значения?
VGHL :: String langName = stringTree.get (...);
Но это, скорее всего, не проблема, так как это привело бы к ошибке времени компиляции.
Не уверены, работает ли аргумент L "VGHL.StringTable.Language"?