XML Data Binding
Несколько XSD.
В основном содержатся include на расширения.
Несколько Namespace, это важно.
Биндинги кривые - узлы без NS.
Кто-нибудь сталкивался? Решали?
Писать руками в строку или на уровне узлов не хочу.
SO предлагают раскрыть Include по месту в одном файле и перегенерировать биндинги или построить XSD по XML.
https://stackoverflow.com/questions/29507797/ixmlnode-set-prefix-and-namespace
Другой вариант - патчить
https://stackoverflow.com/questions/3989012/how-do-i-add-a-namespace-prefix-to-each-node-using-txmldocument
Но он расставляет NS даже для defaultNaespace, что не нужно.
Пока решил явным декларированием, но это криво, тк id NS это переменная, а не константа.
Для записи/генерации потянет, а для чтения - потенциальный косяк.
function NewDocInfo: IXMLDocumentInfoTtype;
begin
Result := NewXMLDocument.GetDocBinding('DocInfo', TXMLDocumentInfoTtype, TargetNamespace) as IXMLDocumentInfoTtype;
Result.DeclareNamespace('ext2016', Ext2016Namespace);
end;
function TXMLDocumentTtype.Get_EDocument: Integer;
begin
Result := ChildNodes['ext2016:EDocument'].NodeValue;
end;
procedure TXMLDocumentTtype.Set_EDocument(Value: Integer);
begin
ChildNodes['ext2016:EDocument'].NodeValue := Value;
end;
// но это ж криво.
//RegisterChildNode('EDocument', TXMLEDocumentNode, Ext2016Namespace); не сработало.
я пробовал, менял потом тип мосле мастера создания. но если меняется название префикса, опять всё ломается... в итоге тупо бегал по нодам с их префиксами(они автоматом подставятся если дока вообще проходить проверку xml)
Решали. Класс был какой то свой - расширяющий или исправляющий работу с namespace, который подключали и по моему биндинг ручками таки надо было править. Делали это на d2006.
в шарпе такое решил, но вот в дельфи переделать префикс при создании это целая куча движения. в итоге плюнул и делал заполнение структуры при чтении отдельно через беготню по нодам с их префиксами.. если не сложно мне то же киньте решение этого вопроса.
Тож интересно посмотреть
Обсуждают сегодня