---
title: "Переводить Markdown то DOM"
---

Чтобы программно читать, манипулировать и изменять содержание и форматирование документа, вам нужно перевести его на веб-сайт. Aspose.Words Document Object Model ()DOM).

В отличие от текстов, Markdown не соответствует требованиям DOM описанный в [Aspose.Words Document Object Model (DOM)](/words/ru/net/aspose-words-document-object-model/) Статья. Однако, Aspose.Words Создает собственный механизм перевода Markdown документы для DOM и обратно, чтобы мы могли успешно работать с их элементами, такими как форматирование текста, таблицы, заголовки и другие.

В этой статье объясняется, как различные markdown Функции могут быть переведены в Aspose.Words DOM и обратно в Markdown Формат.

## Сложность перевода Markdown - DOM - Markdown

Основная сложность этого механизма заключается не только в переводе. Markdown то DOM, но и сделать обратную трансформацию - сохранить документ обратно в исходное состояние. Markdown Формат с минимальными потерями. Есть элементы, такие как многоуровневые котировки, для которых обратное преобразование не тривиально.

Наш движок перевода позволяет пользователям не только работать со сложными элементами в существующем Markdown документ, а также для создания собственного документа в Markdown Формат с оригинальной структурой с нуля. Для создания различных элементов необходимо использовать стили с конкретными названиями по определенным правилам, описанным ниже в этой статье. Такие стили можно создавать программно.

## Общий перевод Принципы

Мы используем [Font](https://reference.aspose.com/words/net/aspose.words/font/) Форматирование для встроенных блоков. Если нет прямой корреспонденции для Markdown свойство Aspose.Words DOM, Мы используем стиль персонажа с именем, которое начинается с некоторых специальных слов.

Для контейнерных блоков мы используем наследование стиля для обозначения вложенных Markdown особенности. В этом случае, даже когда нет вложенных функций, мы также используем стили абзацев с именем, которое начинается с некоторых специальных слов.

Бюллетени и упорядоченные списки представляют собой контейнерные блоки. Markdown И тоже. Их гнездование представлено в DOM Так же, как и для всех остальных контейнерных блоков, использующих стиль наследования. Кроме того, списки в DOM соответствовали форматированию номеров в стиле списка или в формате абзаца.

## Встроенные блоки

Мы используем [Font](https://reference.aspose.com/words/net/aspose.words/font/) Форматирование при переводе **Bold**, *Italic* или ~~Strikethrough~~inline markdown особенности.

|  Markdown особенность |   Aspose.Words        |
|  -----------------------------  |  ------------------  |
|  **Bold**`{1}` |  `Font.Bold = true`  |
|   {{< gist "aspose-words-gists" "eacc4fc7407a98d683f3084bb86d58f7" "Examples-DocsExamples-DocsExamples-Programming with Documents-Working with Markdown-BoldText.cs" >}}  |  |
|  **Italic**`*italic text*` |  `Font.Italic = true`  |
|   {{< gist "aspose-words-gists" "eacc4fc7407a98d683f3084bb86d58f7" "Examples-DocsExamples-DocsExamples-Programming with Documents-Working with Markdown-ItalicText.cs" >}}  |  |
|  **Strikethrough**`~Strikethrough text~` |  `Font.StrikeThrough = true`  |
|  ```csharp // Use a document builder to add content to the document.
DocumentBuilder builder = new DocumentBuilder();

// Make the text Strikethrough.
builder.Font.Strikethrough = true;
builder.Writeln("This text will be Strikethrough"); ``` |  |

Мы используем стиль персонажа с именем, начинающимся от слова. `InlineCode` с последующей факультативной точкой `(.)` и несколько задних ходов ```(`)``` для `InlineCode` особенность. Если пропущено несколько бэктиков, то по умолчанию будет использоваться один бэктик.

|  Markdown особенность |   Aspose.Words        |
|  -----------------------------  |  ------------------  |
|  **InlineCode**`{1}` |  `Font.StyleName = "InlineCode[.][N]"`  |
|   {{< gist "aspose-words-gists" "eacc4fc7407a98d683f3084bb86d58f7" "Examples-DocsExamples-DocsExamples-Programming with Documents-Working with Markdown-InlineCode.cs" >}}  |  |
|  **Autolink**`<scheme://domain.com>``<email@domain.com>` |  The [FieldHyperlink](https://reference.aspose.com/words/net/aspose.words.fields/fieldhyperlink/) класс |
|   {{< gist "aspose-words-gists" "eacc4fc7407a98d683f3084bb86d58f7" "Examples-DocsExamples-DocsExamples-Programming with Documents-Working with Markdown-Autolink.cs" >}}  |  |
|  **Link**`{1}``{2}``{3}``{4})` |  The [FieldHyperlink](https://reference.aspose.com/words/net/aspose.words.fields/fieldhyperlink/) класс |
|   {{< gist "aspose-words-gists" "eacc4fc7407a98d683f3084bb86d58f7" "Examples-DocsExamples-DocsExamples-Programming with Documents-Working with Markdown-Link.cs" >}}  |  |
|  **Image**`{1}``{2}``{3}``{4})` |  The [Shape](https://reference.aspose.com/words/net/aspose.words.drawing/shape/) класс |
|   {{< gist "aspose-words-gists" "eacc4fc7407a98d683f3084bb86d58f7" "Examples-DocsExamples-DocsExamples-Programming with Documents-Working with Markdown-Image.cs" >}}  |  |

## Контейнерные блоки

Документ представляет собой последовательность контейнерных блоков, таких как заголовки, абзацы, списки, цитаты и другие. Блоки контейнеров можно разделить на 2 класса: Блоки листьев и сложные контейнеры. Блоки листьев могут содержать только встроенный контент. Сложные контейнеры, в свою очередь, могут содержать другие контейнерные блоки, в том числе блоки Leaf.

### Блоки листьев

В приведенной ниже таблице приведены примеры использования Markdown Листья блокируют Aspose.Words:

|  Markdown особенность |   Aspose.Words                                                  |
|  ------------------------------------------------------------  |  ------------------------------------------------------------  |
|  **HorizontalRule**`-----` |  Это простой абзац с соответствующей формой горизонтального правила:`DocumentBuilder.InsertHorizontalRule()` |
|   {{< gist "aspose-words-gists" "eacc4fc7407a98d683f3084bb86d58f7" "Examples-DocsExamples-DocsExamples-Programming with Documents-Working with Markdown-HorizontalRule.cs" >}}  |                                                                |
|  **ATX Heading**`# H1, ## H2, ### H3…` |  `ParagraphFormat.StyleName = "Heading N"`, где (1<= N <= 9).Это переводится во встроенный стиль и должно быть именно указанного шаблона (никаких суффиксов или префиксов не допускается).В противном случае это будет обычный абзац с соответствующим стилем |
|   {{< gist "aspose-words-gists" "eacc4fc7407a98d683f3084bb86d58f7" "Examples-DocsExamples-DocsExamples-Programming with Documents-Working with Markdown-Heading.cs" >}}  |                                                                |
|  **Setext Heading**`===` (если уровень 1),`---` (если уровень 2) |  `ParagraphFormat.StyleName = "SetextHeading[some suffix]"`, основанный на 'Heading N' стиль.Если (N > 2), то 'Heading 2' будет использоваться, в противном случае 'Heading 1'.Допускается любой суффикс, но Aspose.Words Импортер использует цифры "1" и "2" соответственно |
|  ```csharp // Use a document builder to add content to the document.
DocumentBuilder builder = new DocumentBuilder();

builder.ParagraphFormat.StyleName = "Heading 1";
builder.Writeln("This is an H1 tag");

// Reset styles from the previous paragraph to not combine styles between paragraphs.
builder.Font.Bold = false;
builder.Font.Italic = false;

Style setexHeading1 = builder.Document.Styles.Add(StyleType.Paragraph, "SetextHeading1");
builder.ParagraphFormat.Style = setexHeading1;
builder.Document.Styles["SetextHeading1"].BaseStyleName = "Heading 1";
builder.Writeln("Setext Heading level 1");

builder.ParagraphFormat.Style = builder.Document.Styles["Heading 3"];
builder.Writeln("This is an H3 tag");

// Reset styles from the previous paragraph to not combine styles between paragraphs.
builder.Font.Bold = false;
builder.Font.Italic = false;

Style setexHeading2 = builder.Document.Styles.Add(StyleType.Paragraph, "SetextHeading2");
builder.ParagraphFormat.Style = setexHeading2;
builder.Document.Styles["SetextHeading2"].BaseStyleName = "Heading 3";

// Setex heading level will be reset to 2 if the base paragraph has a Heading level greater than 2.
builder.Writeln("Setext Heading level 2"); ``` |
|   **Indented Code**                                             |  `ParagraphFormat.StyleName = "IndentedCode[some suffix]"`     |
|   {{< gist "aspose-words-gists" "eacc4fc7407a98d683f3084bb86d58f7" "Examples-DocsExamples-DocsExamples-Programming with Documents-Working with Markdown-IndentedCode.cs" >}}  |                                                                |
|  **Fenced Code**```csharp``` c#
if ()
then
else
`````` |  `ParagraphFormat.StyleName = "FencedCode[.][info string]"`The `[.]` и `[info string]` необязательно |
|   {{< gist "aspose-words-gists" "eacc4fc7407a98d683f3084bb86d58f7" "Examples-DocsExamples-DocsExamples-Programming with Documents-Working with Markdown-FencedCode.cs" >}}   |                                                                |

### Комплексные контейнеры

В приведенной ниже таблице приведены примеры использования Markdown Сложные контейнеры в Aspose.Words:

|  Markdown особенность |   Aspose.Words                                                  |
|  ------------------------------------------------------------  |  ------------------------------------------------------------  |
|  **Quote**`> quote,``>> nested quote` |  `ParagraphFormat.StyleName = "Quote[some suffix]"`Суффикс в названии стиля необязателен, но Aspose.Words Импортер использует упорядоченные номера 1, 2, 3, .... в случае вложенных котировок.Гнездо определяется через унаследованные стили |
|  ```csharp // Use a document builder to add content to the document.
DocumentBuilder builder = new DocumentBuilder();

// By default a document stores blockquote style for the first level.
builder.ParagraphFormat.StyleName = "Quote";
builder.Writeln("Blockquote");

// Create styles for nested levels through style inheritance.
Style quoteLevel2 = builder.Document.Styles.Add(StyleType.Paragraph, "Quote1");
builder.ParagraphFormat.Style = quoteLevel2;
builder.Document.Styles["Quote1"].BaseStyleName = "Quote";
builder.Writeln("1. Nested blockquote"); ``` |
|  **BulletedList**`- Item 1``- Item 2` `   - Item 2a` `   - Item 2b` |  Бюллетени представлены с использованием нумерации пунктов:`ListFormat.ApplyBulletDefault()`Могут быть 3 типа списков. Они диффундируют только в нумерационном формате самого первого уровня. Это: `‘-’`, `‘+’` или `‘*’` соответственно |
|   {{< gist "aspose-words-gists" "eacc4fc7407a98d683f3084bb86d58f7" "Examples-DocsExamples-DocsExamples-Programming with Documents-Working with Markdown-BulletedList.cs" >}}  |                                                                |
|  **OrderedList**`1. Item 1``2. Item 2` `1) Item 2a` `2) Item 2b` |  Упорядоченные списки представлены с использованием нумерации пунктов:`ListFormat.ApplyNumberDefault()`Может быть 2 символа формата: "." и "." Маркер по умолчанию - "..." |
|  ```csharpDocument doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

builder.ListFormat.ApplyBulletDefault();
builder.ListFormat.List.ListLevels[0].NumberFormat = $"{(char) 0}.";
builder.ListFormat.List.ListLevels[1].NumberFormat = $"{(char) 1}.";

builder.Writeln("Item 1");
builder.Writeln("Item 2");

builder.ListFormat.ListIndent();

builder.Writeln("Item 2a");
builder.Writeln("Item 2b"); ``` |                                                                |

### Таблицы

Aspose.Words позволяет переводить таблицы в DOM, Как показано ниже:

|  Markdown особенность |   Aspose.Words                                                  |
|  ------------------------------------------------------------  |  ------------------------------------------------------------  |
|  `Table`а) | b``-|-``c|d пункт |  [Table](https://reference.aspose.com/words/net/aspose.words.tables/table/), [Row](https://reference.aspose.com/words/net/aspose.words.tables/row/) и [Cell](https://reference.aspose.com/words/net/aspose.words.tables/cell/) классы |
|  ```csharp // Use a document builder to add content to the document.
DocumentBuilder builder = new DocumentBuilder();

// Add the first row.
builder.InsertCell();
builder.Writeln("a");
builder.InsertCell();
builder.Writeln("b");

// Add the second row.
builder.InsertCell();
builder.Writeln("c");
builder.InsertCell();
builder.Writeln("d"); ``` |                                                                |

## Смотрите также

* [Работать с Markdown Особенности](/words/ru/net/working-with-markdown-features/)

