2013-07-17 122 views
3

我想下面将工作:如何从OpenXML docx文件中删除书签?

var bod = wordDoc.MainDocumentPart.Document.Body; 

foreach (var bookmark in bod.Descendants<BookmarkStart>()) 
{ 
    bookmark.Remove(); 
} 

foreach (var bookmark in bod.Descendants<BookmarkEnd>()) 
{ 
    bookmark.Remove(); 
} 

但是这会损坏文件。

+0

注意:您不能修改你迭代这似乎是你在这里做什么的集合。你也可以解释**如何破坏文件? – Mgetz

+0

我不知道文档是如何被破坏的,只是它是。这是我在尝试打开它时从Word获得的错误消息。它不提供更多信息。 – DaveDev

回答

0

尝试增加

bookmark.RemoveAllChildren();

bookmark.Remove()

+0

不幸的是,这并没有做任何事情 – DaveDev

5

试试这个,它的工作在我的文档。

var bs = wordDoc.MainDocumentPart.Document 
      .Descendants<BookmarkStart>() 
      .ToList(); 
     foreach (var s in bs) 
      s.Remove(); 

var be = wordDoc.MainDocumentPart.Document 
      .Descendants<BookmarkEnd>() 
      .ToList(); 
     foreach (var e in be) 
      e.Remove(); 
0

简单的解决方案:

wordDoc.MainDocumentPart.Document.RemoveAllChildren<BookmarkStart>(); 
wordDoc.MainDocumentPart.Document.RemoveAllChildren<BookmarkEnd>(); 
+0

工作不正常。 – t98907