2012-02-28 87 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