DOCX XML不像Word一样代表换行符吗?

时间:2015-09-29 15:43:32

标签: xml ms-word openxml docx openxml-sdk

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

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

以下是我在Word中看到的可见空格的示例:

enter image description here

因此,在我的应用程序中,我将此段落作为DocumentFormat.OpenXml.Wordprocessing.Paragraph对象引用。在浏览Open XML文档之后,我清楚地知道没有表示" line"以XML格式。所以我能做的最好的就是拥有Paragraph,与行最接近的是Run对象。在此示例中,Paragraph节点具有6个Run对象的集合。如果我在此示例中获得InnerXml的{​​{1}}属性,则其外观如下:

Paragraph

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

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

我需要解析超过300个单词文档,这些文档依赖于格式化的换行符。我需要换行,我怎么能得到它们?这是否可以使用Open XML SDK?

提前致谢。

1 个答案:

答案 0 :(得分:1)

您在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>

会产生

  

这是
  一个简单的句子。

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

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

  

测试的荷兰国际集团

请注意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>