2012-07-05 154 views
0

我使用XOM庫來解析和處理.docx文檔。 MS Word將文本內容存儲在段落標記(< w:p >)中的運行(< w:r >)中,並且經常將文本分成若干運行。有時,他們之間的每一個詞和每個空間都是分開的。當我加載一個只包含空格的運行時,解析器將刪除該空間並將其作爲空標記進行處理,因此輸出包含不含空格的文本。我如何強制解析器保留所有的空格?我寧願保留這個解析器,但如果沒有解決方案,你能推薦一個替代解決方案嗎?StreamingPathFilter修剪空格

這是我如何調用分析器:

StreamingPathFilter filter = new StreamingPathFilter("/w:document/w:body/*:*", prefixes); 
Builder builder = new Builder(filter.createNodeFactory(null, contentTransform)); 
builder.build(documentFile); 
... 

StreamingTransform contentTransform = new StreamingTransform() { 

    @Override 
    public Nodes transform(nu.xom.Element node){ 
     <...process XML and output text...> 
    } 
}  

回答

0

同時,我找到了解決這個問題,這要歸功於作者Elliotte生鏽的哈羅德的XOM郵件列表上的提示。

首先,StreamingPathFilter其實不是nu.xom包的一部分,它屬於nux.xom

其次,問題是由StreamingPathFilter造成的。當我將代碼更改爲使用默認的構造函數Builder時,輸出中出現缺失的空格。

只爲文件,新的代碼如下所示:

Builder builder = new Builder(); 
nu.xom.Document doc = builder.build(documentFile); 
context = XPathContext.makeNamespaceContext(doc.getRootElement()); 
Nodes nodes = doc.getRootElement().query("w:body/*", context); 
for (int i = 0; i < nodes.size(); i++) { 
    transform((nu.xom.Element) nodes.get(i)); 
} 
... 

private void transform(nu.xom.Element node){ 
    //process nodes 
    ... 
}