Я использую OpenXML SDK для программной замены некоторых <w:sdt/>
элементов на фрагменты разметки OpenXML (WordProcessingML).
Например, у меня есть параграф с таким содержанием:
<w:p>
<w:run><w:text> Text before </w:text></w:run>
<w:sdt><w:sdtPr> ...</w:sdtPr><w:sdtContent>...</w:sdtContent></w:sdt>
<w:run><w:text> Text after </w:text></w:run>
</w:p>
И таблица с такой структурой:
<w:tbl>
<w:tblPr>...</w:tblPr>
<w:tblGrid> ... gridCol elements ...</w:tblGrid>
<w:tr>
<w:trPr>...</w:trPr>
<w:tc>
<w:tcPr>...</w:tcPr>
<w:p> Cell contents </w:p>
</w:tc>
<w:tc>
<w:tcPr>...</w:tcPr>
<w:p> Cell contents </w:p>
</w:tc>
</w:tr>
</w:tbl>
В основном я хочу заменить элемент <w:sdt/>
в абзаце на разметку таблицы.
Проблема в том, что я не могу просто заменить его, потому что он создаст недопустимый документ (таблица с абзацами внутри другого элемента абзаца недопустима).
Результат, который я хочу получить, таков:
<w:p>
<w:run><w:text> Text before </w:text></w:run>
</w:p>
<w:tbl>
<w:tblPr>...</w:tblPr>
<w:tblGrid> ... gridCol elements ...</w:tblGrid>
<w:tr>
<w:trPr>...</w:trPr>
<w:tc>
<w:tcPr>...</w:tcPr>
<w:p> Cell contents </w:p>
</w:tc>
<w:tc>
<w:tcPr>...</w:tcPr>
<w:p> Cell contents </w:p>
</w:tc>
</w:tr>
</w:tbl>
<w:p>
<w:run><w:text> Text after </w:text></w:run>
</w:p>
Я думал о создании метода, который создает новый абзац с элементами перед элементом <w:sdt/>
, а другой - с элементами после элемента sdt, но кажется, что такой метод будет подвержен ошибкам.
Есть ли метод, который может делать то, что я хочу, без необходимости делать это вручную (метод, который делает то, что делает Word, когда я пытаюсь вставить новую таблицу в текстовую строку)?
Любая помощь будет принята с благодарностью.