在OpenXML文档中为新书签定义正确的ID

时间:2015-04-21 12:55:55

标签: c# linq openxml bookmarks

我正在编写一个POC应用程序,我希望能够根据各种标准在Word文档中动态创建书签。

到目前为止,我已经成功地创建并添加了BookmarkStart和BookmarkEnd元素,但我正在试图弄清楚应该如何设置'Id'属性。

我在这方面可以找到的唯一规范是来自MSDN的BookmarkStart元素的样本:

  

id(注释标识符)
  为WordprocessingML文档中的注释指定唯一标识符。 id属性的限制(如果有)由父XML元素定义   如果省略此属性,则文档不符合要求   [示例:考虑使用以下WordprocessingML片段表示的注释:
  < ... w:id =“1”...>
    ...
  < / ...>
  id属性指定当前注释的ID为1.此值用于在文档内容中唯一标识此注释。结束例子]
  此属性的可能值由ST_DecimalNumber简单类型(第17.18.10节)定义。

所以,我知道它必须是一个数字,它是必需的,并且id必须是唯一的(呃!)。现在,它是否应该仅在书签元素之间或在定义id的所有元素之间是唯一的?我该如何制作这样的身份证?我正在考虑使用Linq将所有ID作为数值(整数?对我来说“十进制”意味着浮点数)然后再添加一个到最大值但这看起来有点极端。

到目前为止,我的解决方案包括以下功能:

private static string ComputeNewId(OpenXmlElement root)
{
    return ((from b in root.Descendants<BookmarkStart>() select Decimal.Parse(b.Id)).Max() + 1).ToString();
}

到目前为止它似乎正在起作用,但老实说我不知道​​从长远来看这是否会有任何可靠性,因此任何有关此问题的其他信息都将非常受欢迎。

所有。

0 个答案:

没有答案