我想做的是在 aCommentRangeStart
和相应的CommentRangeEnd
.
我尝试了两种方法来实现这一点,但是问题是CommentRangeEnd
不需要与开始处于同一水平。它可以嵌套在子元素中,请参见下面非常简单的结构(注意这不是正确的打开 xml,它只是为了展示一般想法)。
<w:commentstart/>
<w:paragraph>
<w:run />
<w:commentend />
</w:paragraph>
我尝试过的两个项目如下:首先:我写了一个可枚举,它返回项目直到结束
public static IEnumerable<OpenXmlElement> SiblingsUntilCommentRangeEnd(CommentRangeStart commentStart)
{
OpenXmlElement element = commentStart.NextSibling();
if (IsMatchingCommentEnd(element, commentStart.Id.Value))
{
yield break;
}
while (true)
{
yield return element;
element = element.NextSibling();
// Check that the item
if (element == null)
{
yield break;
}
if (IsMatchingCommentEnd(element, commentStart.Id.Value))
{
yield break;
}
}
}
public static bool IsMatchingCommentEnd(OpenXmlElement element, string commentId)
{
CommentRangeEnd commentEnd = element as CommentRangeEnd;
if (commentEnd != null)
{
return commentEnd.Id == commentId;
}
return false;
}
第二:然后意识到开始和结束不在同一水平上的问题,我继续四处寻找,我发现Eric Whites 回答了处理书签元素之间的元素,我为我的示例重新安装了它,但仍然是开始和结束的问题end 没有相同的父母(即在同一级别)是一个问题,我不能使用它。
有没有更好的方法来看待这个我正在寻找一种处理元素的方法,因为我需要处理正在评论的文本。
编辑: 澄清我想要实现的目标:我正在使用 word 编辑的文档,并在文档中添加评论.
编辑 2: 我已经提出了我目前正在考虑的工作版本,但我的问题是它可能非常脆弱,与 Word 不同的用户组合。这也适用于 xml,这不是一个真正的问题,但可能希望更改为 OpenXML SDK。目前看起来我需要解析整个文档来获取我需要的项目,而不是使用 1 个特定的评论。 https://github.com/mhbuck/DocumentCommentParser/
遇到的主要问题:CommentRangeStart
andCommentRangeEnd
可以在 XML 文档中的不同嵌套中。根节点可能是唯一相似的祖先元素。