OpenXml中的listnum跟踪更改问题(修订版)

时间:2017-02-16 07:39:17

标签: openxml

我已经在单词中打开了轨道更改(修订)选项并进行了一些更改,发现所有轨道更改都在openxml内容中被跟踪和找到。但我没有在openxml内容中看到已删除的listnum值,并且listnum值将从下一段继续。那么如何在openXml中跟踪/获取已删除的listnum值。

关于这个问题的更多细节 - 我们有5个段落,其中包含listnums(a)到(e)。我打开了轨道更改并删除了listnum值(b),以便第二段现在没有listnum。我以为我可以在openxml中得到值(b),因为我打开了轨道更改,但我无法从openxml中获取已删除的值(b)。

谢谢, 马努

1 个答案:

答案 0 :(得分:1)

单个子弹点可能使用以下xml。它是一个包含Run中文本'Item1'的Paragraph。 ParagraphProperties应用样式'ListParagraph'并引用编号:

<w:p>
  <w:pPr>
    <w:pStyle w:val="ListParagraph" />
    <w:numPr>
      <w:ilvl w:val="0" />
      <w:numId w:val="1" />
    </w:numPr>
  </w:pPr>
  <w:r>
    <w:t>Item1</w:t>
  </w:r>
</w:p>

如果启用了“跟踪更改”并且我删除了“Item1”文本,则会获得如下所示的xml:

<w:p>
  <w:pPr>
    <w:pStyle w:val="ListParagraph" />
    <w:pPrChange w:author="Daniel Brixen" w:date="2017-02-16T09:37:00Z" w:id="0">
      <w:pPr>
        <w:pStyle w:val="ListParagraph" />
        <w:numPr>
          <w:numId w:val="1" />
        </w:numPr>
        <w:ind w:hanging="360" />
      </w:pPr>
    </w:pPrChange>
  </w:pPr>
  <w:del w:author="Daniel Brixen" w:date="2017-02-16T09:37:00Z" w:id="2">
    <w:r>
      <w:delText>Item2</w:delText>
    </w:r>
  </w:del>
</w:p>

有两点需要注意:

  • 已删除的文字位于DeletedRun-element
  • 段落属性的更改由ParagraphPropertiesChange-element记录。

因此,您应该可以使用以下内容找到已删除的文本:

  using (var doc = WordprocessingDocument.Open(@"c:\temp\test.docx", true))
  {
    var deletedText = doc.MainDocumentPart.Document.Body.Descendants<DeletedText>();
    Console.WriteLine(String.Join(" ", deletedText.Select(t => t.Text)));
  }

在调试此类内容时,使用Open XML Productivity Tool会很有帮助。