Неофициальный русский перевод. Первоисточник: Microsoft Learn.
Структура документа WordprocessingML
В этом разделе рассматривается базовая структура документа WordprocessingML и приводится обзор важных классов Open XML SDK, которые наиболее часто используются для создания документов WordprocessingML.
Базовая структура документа WordProcessingML состоит из элементов <document> и <body>, за которыми следуют один или несколько элементов блочного уровня, таких как <p>, представляющий абзац. Абзац содержит один или несколько элементов <r>. <r> означает фрагмент текста с общими свойствами — область текста с общим набором свойств, например форматированием. Фрагмент текста с общими свойствами содержит один или несколько элементов <t>. Элемент <t> содержит диапазон текста.
Важные части пакета WordprocessingML
API Open XML SDK предоставляет строго типизированные классы в пространстве имён DocumentFormat.OpenXML.WordprocessingML, соответствующие элементам WordprocessingML.
В следующей таблице перечислены некоторые важные элементы WordprocessingML, часть пакета документа WordprocessingML, которой соответствует элемент (где применимо), и управляемый класс, представляющий элемент в API Open XML SDK.
| Часть пакета | Элемент WordprocessingML | Класс Open XML SDK | Описание |
|---|---|---|---|
| Основной документ | document | Document | Корневой элемент части основного документа. |
| Комментарии | comments | Comments | Корневой элемент части комментариев. |
| Параметры документа | settings | Settings | Корневой элемент части параметров документа. |
| Концевые сноски | endnotes | Endnotes | Корневой элемент части концевых сносок. |
| Нижний колонтитул | ftr | Footer | Корневой элемент части нижнего колонтитула. |
| Сноски | footnotes | Footnotes | Корневой элемент части сносок. |
| Документ-глоссарий | glossaryDocument | GlossaryDocument | Корневой элемент части документа-глоссария. |
| Верхний колонтитул | hdr | Header | Корневой элемент части верхнего колонтитула. |
| Определения стилей | styles | Styles | Корневой элемент части определений стилей. |
Сценарий минимального документа
Документ WordprocessingML организован вокруг концепции областей содержимого (stories). Область содержимого (story) — это область содержимого в документе WordprocessingML. К областям содержимого (stories) WordprocessingML относятся:
комментарий
концевая сноска
нижний колонтитул
сноска
рамка, документ-глоссарий
верхний колонтитул
основная область содержимого
поддокумент
текстовое поле
Не все области содержимого (stories) должны присутствовать в допустимом документе WordprocessingML. Для простейшего допустимого документа WordprocessingML требуется только одна область содержимого (story) — область содержимого основного документа. В WordprocessingML область содержимого основного документа представлена частью основного документа. Как минимум, чтобы создать допустимый документ WordprocessingML с помощью кода, добавьте в документ часть основного документа.
Следующая информация из ISO/IEC 29500 представляет элементы WordprocessingML, требуемые в части основного документа для завершения сценария минимального документа.
Область содержимого основного документа простейшего документа WordprocessingML состоит из следующих XML-элементов:
document— корневой элемент части основного документа WordprocessingML, определяющий область содержимого основного документа.body— контейнер для набора структур блочного уровня, образующих основную область содержимого.p— абзац.r— фрагмент текста с общими свойствами.t— диапазон текста.
© ISO/IEC 29500: 2016
Пример кода Open XML SDK
Следующий код использует Open XML SDK для создания простого документа WordprocessingML, содержащего текст, переданный в качестве второго параметра.
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
static void CreateWordDoc(string filepath, string msg)
{
using (WordprocessingDocument doc = WordprocessingDocument.Create(filepath, DocumentFormat.OpenXml.WordprocessingDocumentType.Document))
{
// Add a main document part.
MainDocumentPart mainPart = doc.AddMainDocumentPart();
// Create the document structure and add some text.
mainPart.Document = new Document();
Body body = mainPart.Document.AppendChild(new Body());
Paragraph para = body.AppendChild(new Paragraph());
Run run = para.AppendChild(new Run());
// String msg contains the text from the msg parameter"
run.AppendChild(new Text(msg));
}
}
Imports DocumentFormat.OpenXml.Packaging
Imports DocumentFormat.OpenXml.Wordprocessing
Module MyModule
Sub Main(args As String())
CreateWordDoc(args(0), args(1))
End Sub
Sub CreateWordDoc(filepath As String, msg As String)
Using doc As WordprocessingDocument = WordprocessingDocument.Create(filepath, DocumentFormat.OpenXml.WordprocessingDocumentType.Document)
' Add a main document part.
Dim mainPart As MainDocumentPart = doc.AddMainDocumentPart()
' Create the document structure and add some text.
mainPart.Document = New Document()
Dim body As Body = mainPart.Document.AppendChild(New Body())
Dim para As Paragraph = body.AppendChild(New Paragraph())
Dim run As Run = para.AppendChild(New Run())
' String msg contains the text from the msg parameter
run.AppendChild(New Text(msg))
End Using
End Sub
End Module
Созданный WordprocessingML
После запуска кода Open XML SDK из предыдущего раздела для создания документа можно изучить содержимое пакета .zip, чтобы просмотреть XML-код WordprocessingML. Чтобы просмотреть пакет .zip, переименуйте расширение минимального документа с .docx на .zip. Пакет .zip содержит части, из которых состоит документ. В данном случае, поскольку код создал минимальный документ WordprocessingML, имеется только одна часть — часть основного документа. На следующем рисунке показана структура в папке word пакета .zip для минимального документа, содержащего одну строку текста. Заполнитель иллюстрацииФайл document.xml соответствует части основного документа WordprocessingML, и именно эта часть содержит содержимое основной части документа. Следующий XML-код создаётся в файле document.xml при запуске кода Open XML SDK из предыдущего раздела.
<?xml version="1.0" encoding="utf-8"?>
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:body>
<w:p>
<w:r>
<w:t>The text passed as the second parameter goes here</w:t>
</w:r>
</w:p>
</w:body>
</w:document>
Сценарий типичного документа
Типичный документ не будет пустым минимальным документом. Например, типичный документ может содержать комментарии, верхние колонтитулы, нижние колонтитулы, сноски и концевые сноски. Каждая из этих дополнительных частей содержится в zip-пакете текстового документа.
На следующем рисунке показаны многие части, которые можно найти в типичном документе.
Рисунок 1. Структура типичного документа

Лицензия исходного репозитория Microsoft (оригинал)
MIT License
Copyright (c) Microsoft Corporation. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE