2012-02-28 48 views
0

我正在使用下面的代码来读取.docx文件,并且它正在成功地从文件中提取文本。但问题在于,它只是提取文本。例如,如果我的文档数据是像下面提取docx文件中的文本

I am line 1 

I am line 2  I am some other text 

然后它返回我像

I am line 1I am line 2I am some other text. 

我只是希望它是。我怎样才能做到这一点。以下是我现在使用的代码。

open System 
open System.IO 
open System.IO.Packaging 
open System.Xml 

let getDocxContent (path: string) = 
use package = Package.Open(path, FileMode.Open) 
let stream = package.GetPart(new Uri("/word/document.xml",UriKind.Relative)).GetStream() 
stream.Seek(0L, SeekOrigin.Begin) |> ignore 
let xmlDoc = new XmlDocument() 
xmlDoc.Load(stream) 
xmlDoc.DocumentElement.InnerText 
let docData = getDocxContent @"C:\a1.docx" 
printfn "%s" docData 
+0

难道你的意思“因为它是”要保留外观和感觉? – 2012-02-28 18:15:40

+0

对我来说,它返回; 'val docData:string =“我是第一行我是第二行我是一些其他的文本”“(与正确数量的空格) – Dirk 2012-02-28 18:42:33

+0

@GeneBelitski我不需要格式化,但我只需要用换行符和空格来保存。 – Exception 2012-02-29 08:59:21

回答

2

您需要在加载之前在您的XmlDocument上设置PreserveWhitespace属性。

因此改变从代码:

let xmlDoc = new XmlDocument() 
xmlDoc.Load(stream) 

要:

let xmlDoc = new XmlDocument() 
xmlDoc.PreserveWhitespace <- true 
xmlDoc.Load(stream) 
+0

非常感谢和帮助..我如何保留换行符? – Exception 2012-02-29 14:26:59

+1

我不认为你可以 - 我只是创建了一个类似于你的测试文档,然后在文本编辑器中打开/word/document.xml,并且文档中没有任何换行符。相反,段落使用 ...元素分隔 - 所以您可以使用XPath查询或LINQ to XML来提取它们。 – 2012-02-29 15:56:16

+0

非常感谢您的帮助和关注..我想知道什么是.net库的许多地狱的用途.. – Exception 2012-02-29 15:58:37