C# Word文档中找不到段落和表格(开放式XML)

C# Word文档中找不到段落和表格(开放式XML),c#,ms-word,openxml,C#,Ms Word,Openxml,我已经使用MS Word创建了简单的开放式XML文档(.dotx)。该文件包含简单文本和一个表。我试图用新文本替换文本中的一些自定义占位符,但是下面的代码片段在文档中找不到任何段落或表格。我尝试创建了几个新的.dotx文件,还尝试了文档类型的不同变体,即使用MS Word创建的.dotx和(严格开放XML).docx,但问题仍然存在 using (WordprocessingDocument doc = WordprocessingDocument.Open(tem

我已经使用MS Word创建了简单的开放式XML文档(.dotx)。该文件包含简单文本和一个表。我试图用新文本替换文本中的一些自定义占位符,但是下面的代码片段在文档中找不到任何
段落
表格
。我尝试创建了几个新的.dotx文件,还尝试了文档类型的不同变体,即使用MS Word创建的
.dotx
(严格开放XML).docx
,但问题仍然存在

   using (WordprocessingDocument doc =
            WordprocessingDocument.Open(templatePath, true))
        {

            var body = doc.MainDocumentPart.Document.Body;
            var paras = body.Elements<Paragraph>(); // <-- always empty
            var tables = body.Descendants<Table>(); // <-- always empty

            foreach (Table t in tables)
            {
                t.Append(new TableRow(new TableCell(new Paragraph(new Run(new Text("test"))))));
            }

            foreach (var para in paras)
            {
                foreach (var run in para.Elements<Run>())
                {
                    foreach (var text in run.Elements<Text>())
                    {
                        if (text.Text.Contains("###name###"))
                        {
                            text.Text = text.Text.Replace("###name###", "Sample");
                        }
                    }
                }
            }
            doc.SaveAs(resultPath);
        }

当您使用诸如MS Word之类的编辑器创建文档时,它可以添加一些容器来包装您的段落,我建议您检查生成的xml。要做到这一点,您只需将
.docx
重命名为
.zip
,然后打开该归档文件

在里面你会发现这样的文件

您需要使用任何文本编辑器打开
word/document.xml
,然后查看
是否在那里,它是否是
的直接子级。如果不是直接的,请使用
子体
方法

var paras = body.Descendants<Paragraph>(); // <-- always empty

var-paras=body.subjects();//您好,我刚刚检查了这个,似乎
-
是直接子项,因为我在测试模式下可以使用任何编辑器。。你能推荐一个吗?我的意思是记事本、VS代码或AtomI已经成功地打开了文件,并且序列似乎如上所述是正确的。我还尝试用写字板重新创建文件,但问题似乎仍然存在。我看不出您的代码中有问题。能否检查模板路径是否有效,以及文件是否位于正确位置?您的代码中的
resultPath
是什么?是的,文件是有效的,因为我看到它是通过“using”语句加载的。。。另外,我在后面的代码中使用了相同的路径。。所以没问题。
var paras = body.Descendants<Paragraph>(); // <-- always empty