В процессе подготовки 3.2.4.0.
Добавил в icpp объекты для последовательного чтения и записи XML файлов.
Решение базируется на XmlLite и полностью реализует его интерфейсы, за исключением IXmlResolver и механизмов поддержки нестандартных кодировок.
IXmlResolver добавлю чуть позже.
В отличие от DOM модели, XmlLite не требователен к ресурсам.
В отличие от реализованных для 7.7 решений с последовательным доступом, XmlLite обладает внятной программной моделью и расширенными возможностями.
К примеру, у нас есть ветка, посвященная проблемам v7plus с доступом к значениям при последовательном доступе:
http://www.1cpp.ru/forum/YaBB.pl?num=1308048306По объекту v7plus, предназначенному для записи, тоже есть, что сказать - но как бы хотелось бы уже не о том.
По XmlLite:- Общая документация:
http://msdn.microsoft.com/en-us/library/ms752872%28v=vs.85%29.aspx- Поддержка является встроенной для ОС: XPsp3, Svr2003Sp2 и далее:
http://msdn.microsoft.com/en-us/library/ee388577%28v=vs.85%29.aspx- Для предыдущих версий существуют обновления:
http://www.microsoft.com/download/en/search.aspx?q=xmlliteКомпоновка icpp с xmllite.dll динамическая, никаких новых зависимостей не добавлено.
xmllite.dll будет подгружаться непосредственно в момент первого обращения к ссответствующим объектам icpp.
Нативно поддерживаемые кодировки:
http://msdn.microsoft.com/en-us/library/ms752827%28v=vs.85%29.aspxРеференс интерфейса IXmlReader:
http://msdn.microsoft.com/en-us/library/ms752743%28v=vs.85%29.aspxРеференс интерфейса IXmlWriter:
http://msdn.microsoft.com/en-us/library/ms752860%28v=vs.85%29.aspxПо icpp/xmllite:Добавлены объекты:
- 1cpp.XmlLiteReader
- 1cpp.XmlLiteWriter
Имена свойств и методов совпадают с референсными.
Порядок параметров методов совпадает с референсным, за исключением методов SetInput | SetOutput
- 1cpp.XmlLiteReader::SetInput(BinaryData Src, UINT nEncodingCodePage = 0 | LPCSTR nEncodingName, BOOL fEncodingHint = TRUE)
- 1cpp.XmlLiteWriter::SetOutput(BinaryData Dst, UINT nEncodingCodePage = CP_UTF8 | LPCSTR nEncodingName)
fEncodingHint влияет на возможность автоопределения кодировки файла в случае отсутствия BOM.
- fEncodingHint == 0 автоопределение запрещено (возможно исключение в случае несовпадения кодировок)
- fEncodingHint == 1 автоопределение разрешено
Также отличие методов объектов icpp отличается в характере обработки ошибок.
COM-интерфейсы XmlLite могут возвращать методам icpp ошибку в HRESULT.
В этом случае методы icpp генерируют исключения.
Значения S_OK и S_FALSE передаются в вызывающий контекст в качестве возвращаемых значенй.
Обратите внимание, в COM значением успеха S_OK является значение 0.
Поэтому в методах, которые могут возвращать S_OK(0) и S_FALSE(1) (например, Read(), MoveToNextAttribute()), поведение может быть непривычным с точки зрения 1С.
Тем не менее, значения данных кодов возврата методов COM-интерфейсов полностью сохранены для объектов icpp.
Список кодов ошибок:
http://msdn.microsoft.com/en-us/library/ms753129%28v=vs.85%29.aspxВозможно, чуть позже я добавлю методы объектов icpp типа GetErrorCode() / GetErrorDescription()
Для освобождения объектов добавлены методы объектов
1cpp.XmlLiteReader::Release()
1cpp.XmlLiteWriter::Release()
Для освобождения ресурсов, захваченных объектами BinaryData, необходим дополнительный вызов BinaryData::Close()
По документации:К сожалению, я не могу сейчас взяться за перевод и адаптацию документации для icpp
Скорее всего, это будет поставлено в план на конец лета - осень.
Пока постараюсь ответить на вопросы по существующей документации, если они появятся.
В архиве есть микропример для быстрого ознакомления с базовыми моментами.
Комментарии по реализованному функционалу, как всегда, приветствуются и принимаются.
icpp 3.2.4.0 rc1