Решение получить Id комментария, который, как вы сказали, что вы уже знаете, как получить, а затем искать документ для элемента CommentRangeStart с тем же идентификатором. Когда вы его найдете, вы можете перебрать .NextSibling(), пока не нажмете элемент CommentRangeEnd.
Элементы между CommentRangeStart и CommentRangeEnd являются ссылочной частью, которая, очевидно, может представлять собой несколько прогонов, абзацев, изображений и т. Д. Поэтому вам придется как-то обрабатывать собранные элементы.
Я сделал тестовый документ, глядя, как это: ![document example](https://i.stack.imgur.com/TXGlo.png)
Я сделал этот код, чтобы проверить это:
using (var wordDoc = WordprocessingDocument.Open(@"c:\test\test.docx", true))
{
MainDocumentPart mainPart = wordDoc.MainDocumentPart;
var document = mainPart.Document;
var comments = mainPart.WordprocessingCommentsPart.Comments.ChildElements;
foreach(Comment comment in comments)
{
string commentId = comment.Id;
string commentText = comment.InnerText;
OpenXmlElement rangeStart = document.Descendants<CommentRangeStart>().Where(c => c.Id == commentId).FirstOrDefault();
List<OpenXmlElement> referenced = new List<OpenXmlElement>();
rangeStart = rangeStart.NextSibling();
while(!(rangeStart is CommentRangeEnd))
{
referenced.Add(rangeStart);
rangeStart = rangeStart.NextSibling();
}
Console.WriteLine("Comment Id " + commentId + " with text \"" + " " + commentText + "\" references =>");
foreach (var ele in referenced)
{
if(!string.IsNullOrWhiteSpace(ele.InnerText))
{
Console.WriteLine(" " + ele.InnerText);
}
}
}
Console.ReadKey();
}
Который производит этот выход ![Console output of code](https://i.stack.imgur.com/b2Isk.png)
Я надеюсь, что это помогает !
Спасибо! Решение, которое вы предоставили, действительно помогло мне придумать решение для моего проекта. –
Если бы это был ответ, который вы искали, не могли бы вы его принять? –