小编zak*_*zak的帖子

Document.Body.Descendants<SdtBlock>() 不返回所有 *sdt* 元素

我正在尝试查找 Word 文档中的所有 SdtElement。我使用了下面的代码:

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
}
Run Code Online (Sandbox Code Playgroud)

问题是上面的代码没有返回文件中的所有 SdtElements。在一份文档中有 19 个 SdtElement,但它只返回 7 个。

根据文档,后代方法应返回所有级别的元素:

Elements只查找那些直接后代元素,即直接子元素。vs Descendants查找任何级别的孩子,即孩子、孙子等...

观察到的一件事是仅返回bodypara表格单元格下的sdt ,但是当sdt位于表格单元格内的para下时,它不会返回。

我尝试了http://www.ericwhite.com/blog/iteating-through-all-content-controls-in-an-open-xml-wordprocessingml-document/和其他类似文章中的代码。

如何从整个文档中获取所有 sdt 元素,无论嵌套级别如何?

c# openxml wordml

3
推荐指数
1
解决办法
1394
查看次数

标签 统计

c# ×1

openxml ×1

wordml ×1