Я пытаюсь найти все SdtElement в документе Word. Я использовал следующий код:
using (var wordDoc = WordprocessingDocument.Open(FilePath, true))
{
var docSdts = wordDoc.MainDocumentPart.Document.Descendants<SdtElement>();
// MainDocumentPart.Document.Body.Descendants<SdtElement>(); also used but same result
MainDocumentPart mainPart = wordDoc.MainDocumentPart;
List<SdtBlock> sdtList = mainPart.Document.Body.Descendants<SdtBlock>().ToList();
// process all sdt
}
Проблема заключается в том, что приведенный выше код не возвращает все элементы SdtElements из файла. В одном документе имеется 19 SdtElements, но он возвращает только 7.
Согласно документу метод Descendants должен возвращать элементы со всех уровней:
Elements find только те элементы, которые являются прямыми потомками, то есть непосредственными детьми. vs Потомки находит детей на любом уровне, то есть детей, внуков и т. д. c ...
Одна наблюдаемая вещь была только sdt под body , para и ячейки таблицы возвращаются, но когда sdt меньше para внутри ячейка таблицы , она не возвращается.
Я пробовал код из http://www.ericwhite.com/blog/iterating-through-all-content-controls-in-an-open-xml-wordprocessingml-document/ и других подобных статей.
Как получить все sdt элементы всего документа независимо от уровня вложенности?