Цитата:
Сообщение от doesitmatter
У меня не описаны в Schema.xsd значения enum'ов, т.е., например, Drawer определен так:
Код:
<xs:element name="Drawer">
<xs:complexType>
<xs:attribute type="xs:string" name="direction"/>
<xs:attribute type="xs:string" name="ownerWindow"/>
<xs:attribute type="xs:int" name="offsetX" use="required"/>
<xs:attribute type="xs:int" name="offsetY" use="required"/>
<xs:attribute type="xs:boolean" name="directionFixed" use="required"/>
</xs:complexType>
</xs:element>
Получение значения enum'а в nwindow реализовано так же, как и чтение атрибута типа string, но значение enum'а при этом еще и отображается к соотв. константе типа int.
xmlbeans неплохо угадывает типы с опцией -simple-content-types smart, но некоторые типы надо заменить (например, int на short).
|
Возможно у вас оно угадывает лучше, у меня к примеру - получается так
Код:
<xs:complexType name="DrawerType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="direction" use="optional"/>
<xs:attribute type="xs:byte" name="offsetX" use="optional"/>
<xs:attribute type="xs:byte" name="offsetY" use="optional"/>
<xs:attribute type="xs:string" name="directionFixed" use="optional"/>
<xs:attribute type="xs:string" name="ownerWindow" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
И если не использовать simpleType Enum, то во первых оно не будет отображаться в редакторе
как следует , а во вторых не будет правильно сохраняться , вы там спрашивали почему оно нормально не сохраняет при использовании SaveXML,именно ввиду отсутствия enum'мов и неправильно угаданного значения типа.
Я думаю что лучше чтобы не создавать подобные курьезы, когда одно работает совсем иначе, чем у другого - лучше взять ваш софт за базу. Поскольку в нем там все верно описано, xml получаются именно такими какие они есть в оригинале, и сделать нужно - правильную генерацию в XSD.
P.S.
Возможно ли увидеть пример переобразования .xdat в схему, хоть 1 элемента к примеру
L2UIType Window.
Как можно получить Char значение из
Код:
list_children.emplace_back(new List<Window>(fdes));
Чтобы его можно было поместить в
Код:
<xs:complexType name="L2UIType">
<xs:sequence>
<xs:element type="ui:WindowType" name="Window" minOccurs="0" xmlns:ui="http://www.lineage2.co.kr/ui"/>
</xs:complexType>
И по сути загрузка .xdat не требуется ибо весь формат в вашем софте, вот только не понятно - можно ли их итрировать без громоздких циклов, + они привязываются в инстансцу схемы, а это тоже не то что нужно
Код:
auto el_list = static_cast<List<ElementBase>*>(child.get());
for (size_t i = 0; i < el_list->value().size(); i++)
{
auto el = static_cast<const Element*>(el_list->value()[i].get());
res = (const char*)((StrAttribute*)el->children.front().get())->value.get();
fprintf(stdout, "out %s child.get: %s", el->tag, res);
}
таким образом получается выводить элементы L2UIType, но опять же они в xdat повторяются и привязаны к разным значениям .