Объявление о выпуске CTP-версии пакета Open XML SDK версии 2 в апреле 2009 г.
Я действительно счастлив объявить о выпуске второй CTP-версии пакета Open XML SDK версии 2! В октябре 2008 г. я уже показывал вам схему архитектуры пакета Open XML SDK. Взглянем на нее еще раз:
В версии 1 пакета Open XML SDK мы выпустили API-интерфейс упаковки для Open XML, который позволяет создавать и открывать файлы Open XML, а также управлять ими на уровне пакета и разделов. В первой CTP-версии пакета версии 2 реализованы компоненты "Open XML Low Level DOM" и "Stream Reading/Writing", которые позволяют создавать объекты внутри разделов пакета Open XML и управлять этими объектами. Во второй CTP-версии пакета версии 2 предоставляются функции проверки на уровне схемы.
Дополнительные сведения о пакете SDK и всех его компонентах можно найти здесь: https://msdn.microsoft.com/en-us/library/bb448854(office.14).aspx
Сведения о загрузке
Последнюю CTP-версию пакета версии 2 можно загрузить здесь: https://go.microsoft.com/fwlink/?LinkId=127912
Важность проверки
При работе с пакетом Open XML SDK всегда существует вероятность того, что в один прекрасный момент ваше решение приведет к созданию недопустимого или поврежденного файла Open XML. Управление форматами Open XML с помощью базового уровня Open XML сильно упрощает работу с файлами Open XML, однако не гарантирует формирование допустимых файлов Open XML.
Новый компонент "Schema Level Validation" предоставляет механизм, который позволяет находить ошибки Open XML в файлах и исходном коде. Данный компонент поможет вам в отладке и проверке файлов Open XML, основанных на схемах.
Пример
Предположим, мне необходимо создать простой документ с текстом "Здравствуй, мир". Вот фрагмент XML-кода, необходимый для создания этого текста:
<w:body>
<w:p>
<w:r>
<w:t>Здравствуй, мир</w:t>
</w:r>
</w:p>
...
</w:body>
Что произойдет, если я забуду включить элемент Run:
<w:body>
<w:p>
<w:t>Здравствуй, мир</w:t>
</w:p>
...
</w:body>
Если я попробую открыть созданный документ в программе Word, появится следующее сообщение об ошибке:
Не слишком полезное сообщение. При проверке файла с помощью .NET я получу следующее сообщение об ошибке:
\word\document.xml
The element 'p' in namespace 'https://schemas.openxmlformats.org/wordprocessingml/2006/main' has invalid child element 't' in namespace 'https://schemas.openxmlformats.org/wordprocessingml/2006/main'. List of possible elements expected: 'pPr, customXml, smartTag, sdt, dir, bdo, r, proofErr, permStart, permEnd, bookmarkStart, bookmarkEnd, moveFromRangeStart, moveFromRangeEnd, moveToRangeStart, moveToRangeEnd, commentRangeStart, commentRangeEnd, customXmlInsRangeStart, customXmlInsRangeEnd, customXmlDelRangeStart, customXmlDelRangeEnd, customXmlMoveFromRangeStart, customXmlMoveFromRangeEnd, customXmlMoveToRangeStart, customXmlMoveToRangeEnd, ins, del, moveFrom, moveTo' in namespace 'https://schemas.openxmlformats.org/wordprocessingml/2006/main' as well as 'oMathPara, oMath' in namespace 'https://schemas.openxmlformats.org/officeDocument/2006/math' as well as 'fldSimple, hyperlink, subDoc' in namespace 'https://schemas.openxmlformats.org/wordprocessingml/2006/main'. (line 1, col 703)
Это сообщение об ошибке вполне содержательно, однако компонент проверки схемы Open XML SDK предоставляет гораздо более полезную информацию. Вот сообщение об ошибке, которое выводится пакетом Open XML SDK:
The element has invalid child element "https://schemas.openxmlformats.org/wordprocessingml/2006/main:t". List of possible elements expected: <https://schemas.openxmlformats.org/wordprocessingml/2006/main:pPr>. Path: /word/document.xml:/w:document[1]/w:body[1]/w:p[1] OuterXml: <w:p w:rsidR="00900A7A" w:rsidRDefault="00E0086A" xmlns:w="https://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:t>test</w:t></w:p>
Обратите внимание, что в данном сообщении указывается точный путь XPath к элементу и фрагмент XML-кода, который послужил причиной ошибки проверки. У этого компонента есть и другие преимущества, однако отложим разговор о них до следующей записи.
Вопросы
Все свои вопросы вы можете опубликовать здесь или на форуме MSDN, посвященном пакету Open XML SDK, по адресу: https://social.msdn.microsoft.com/Forums/en-US/oxmlsdk/threads. Кроме того, вопросы можно задавать на сайте Open XML SDK Connect: https://connect.microsoft.com/site/sitehome.aspx?SiteID=589.
Зияд Раджаби (Zeyad Rajabi)
Это локализованная запись блога. Исходную статью можно найти по адресу https://blogs.msdn.com/brian_jones/archive/2009/04/08/announcing-the-release-of-the-open-xml-sdk-version-2-april-2009-ctp.