DOCX XML 不像 Word 那样表示换行符?

DOCX XML Does Not Represent Line Breaks Like Word Does?

我正在使用 Open XML SDK 2.5 在我的控制台应用程序中读取 .docx 文件。

Word 显示文档的方式与使用 Open XML SDK 打开时文档在 XML 中的表示方式之间似乎存在一些差异。

这是我在 Word 中看到的示例,其中空白可见:



所以在我的应用程序中,我将此段落作为 DocumentFormat.OpenXml.Wordprocessing.Paragraph 对象引用。浏览 Open XML 文档后,我清楚地知道 XML 格式中没有 "line" 的表示形式。所以我能做的最好的就是让我的 Paragraph 和最接近直线的是 Run 对象。在此示例中,Paragraph 节点具有 6 个 Run 对象的集合。如果我在这个例子中得到 ParagraphInnerXml 属性,它看起来是这样的:

<w:pPr xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"><w:pStyle w:val=\"PlainText\" /><w:numPr><w:ilvl w:val=\"0\" /><w:numId w:val=\"17\" /></w:numPr><w:rPr><w:rFonts w:ascii=\"Arial\" w:hAnsi=\"Arial\" /><w:b /></w:rPr></w:pPr><w:r w:rsidRPr=\"000558F8\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"><w:rPr><w:rFonts w:ascii=\"Arial\" w:hAnsi=\"Arial\" /></w:rPr><w:t>Should we use the term “Verify” instead of “Confirm”</w:t></w:r><w:r w:rsidRPr=\"000558F8\" w:rsidR=\"00F5335C\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"><w:rPr><w:rFonts w:ascii=\"Arial\" w:hAnsi=\"Arial\" /></w:rPr><w:t xml:space=\"preserve\"> as per work instruction</w:t></w:r><w:r w:rsidRPr=\"000558F8\" w:rsidR=\"00411638\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"><w:rPr><w:rFonts w:ascii=\"Arial\" w:hAnsi=\"Arial\" /></w:rPr><w:t>?</w:t></w:r><w:r w:rsidR=\"000558F8\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"><w:rPr><w:rFonts w:ascii=\"Arial\" w:hAnsi=\"Arial\" /></w:rPr><w:br /><w:t>Med</w:t></w:r><w:r w:rsidRPr=\"000558F8\" w:rsidR=\"003E76BD\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"><w:rPr><w:rFonts w:ascii=\"Arial\" w:hAnsi=\"Arial\" /><w:b /></w:rPr><w:br /><w:t xml:space=\"preserve\">JD: </w:t></w:r><w:r w:rsidRPr=\"000558F8\" w:rsidR=\"00A118AB\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"><w:rPr><w:rFonts w:ascii=\"Arial\" w:hAnsi=\"Arial\" /><w:b /></w:rPr><w:t>Done.</w:t></w:r>

我只看到段落属性节点和 6 个 运行 节点。如您所见,运行 节点不等同于线。从 Word 中查看我的示例,我看到该段落有 2 个回车符 returns,我希望它由 3 个 "lines" 表示。然而,在 XML 中,我得到 6 运行s,这似乎与 3 行非常接近,但由于某些原因,某些行似乎是任意分开的。

真正的问题是我看不到任何解释 运行 节点的方式,我可以在 Word 示例中重建行结构。例如,没有任何迹象表明 运行 的 1、2 和 3 一起构成了第 1 行。

我需要解析 300 多个依赖换行符格式化的 word 文档。我需要换行符,我怎样才能得到它们?这可以用 Open XML SDK 实现吗?

提前致谢。

您在 XML 中查找的元素是 Break 元素,即 <w:br />

根据文档,这个 XML:

<w:r>
    <w:t>This is</w:t>
    <w:br/>
    <w:t xml:space="preserve"> a simple sentence.</w:t>
</w:r>

会产生

This is
a simple sentence.

我已经美化了你的 XML 并在这个答案的末尾标记了 Breaks

Runs 不用于确定行,而是它们是包含具有相同属性的文本的逻辑块。例如,假设我有以下文本:

testing

请注意 ing 为粗体。在 OpenXML 中,这需要两个 运行,一个用于 test,另一个用于 ing,因为它们具有不同的属性。 XML 会是这样的:

<w:r>
    <w:t>Test</w:t>
</w:r>
<w:r w:rsidRPr="004750BC">
    <w:rPr>
       <w:b />
    </w:rPr>
    <w:t>ing</w:t>
</w:r>

<w:rPr> 是 运行 属性,其中 <w:b /> 表示粗体。

您的 XML 突出显示了中断:

<w:pPr
    xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
    <w:pStyle w:val="PlainText" />
    <w:numPr>
        <w:ilvl w:val="0" />
        <w:numId w:val="17" />
    </w:numPr>
    <w:rPr>
        <w:rFonts w:ascii="Arial" w:hAnsi="Arial" />
        <w:b />
    </w:rPr>
</w:pPr>
<w:r w:rsidRPr="000558F8"
    xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
    <w:rPr>
        <w:rFonts w:ascii="Arial" w:hAnsi="Arial" />
    </w:rPr>
    <w:t>Should we use the term “Verify” instead of “Confirm”</w:t>
</w:r>
<w:r w:rsidRPr="000558F8" w:rsidR="00F5335C"
    xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
    <w:rPr>
        <w:rFonts w:ascii="Arial" w:hAnsi="Arial" />
    </w:rPr>
    <w:t xml:space="preserve"> as per work instruction</w:t>
</w:r>
<w:r w:rsidRPr="000558F8" w:rsidR="00411638"
    xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
    <w:rPr>
        <w:rFonts w:ascii="Arial" w:hAnsi="Arial" />
    </w:rPr>
    <w:t>?</w:t>
</w:r>
<w:r w:rsidR="000558F8"
    xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
    <w:rPr>
        <w:rFonts w:ascii="Arial" w:hAnsi="Arial" />
    </w:rPr>
    <w:br /> <!-- break here -->
    <w:t>Med</w:t>
</w:r>
<w:r w:rsidRPr="000558F8" w:rsidR="003E76BD"
    xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
    <w:rPr>
        <w:rFonts w:ascii="Arial" w:hAnsi="Arial" />
        <w:b />
    </w:rPr>
    <w:br />  <!-- break here -->
    <w:t xml:space="preserve">JD: </w:t>
</w:r>
<w:r w:rsidRPr="000558F8" w:rsidR="00A118AB"
    xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
    <w:rPr>
        <w:rFonts w:ascii="Arial" w:hAnsi="Arial" />
        <w:b />
    </w:rPr>
    <w:t>Done.</w:t>
</w:r>