2011-02-14 93 views
1

我們正在創建一個腳本來將某些XHTML文件轉換爲Word文件,但是,Word文件和HTML文件處理格式更改的方式有很大不同。取消嵌套HTML標記

例如,我們可以按照如下有節:

<p>Title 

    <ol> 
     <li><p>List 1</p></li> 
     <li><p>List 2</p></li> 
    </ol> 

Additional Information</p> 

這改變文件之間,因爲一些前一定標準寫舊文件,每個文件是由不同的人寫的,創造的不一致。許多文件嵌套很多,很多文件都不是。問題出現在檢測文件嵌套時,因爲儘管它可以在Web瀏覽器中完美呈現,但Word文檔的等效HTML必須格式化爲以下格式,以便輕鬆轉換爲Word使用的XML格式(使用先前的例如):

<p>Title</p> 

<li>List 1</li> 
<li>List 2</li> 

<p>Addition Information</p> 

爲Word文檔,使用OpenXML的標準,在很大程度上依賴於格式的片段明確開始,可以創建一個新的部分之前結束。不幸的是,這適用於任何地方,甚至粗體或斜體部分。

我已經通過尋找什麼類型的列表是的,去除p標籤,而L1標籤轉換爲一的OLI標籤的有序列表和ULI爲創建一個小的正則表達式列表轉換成合適的格式無格式的列表。這反過來又被轉換成適用於Word文檔的正確的XML格式。

我遇到的問題是,如果說ap標籤是嵌套的,就像在上面的例子中一樣,如果是這樣,要在li標籤之前注入一個新的閉合p標籤,在列表之後創建新的打開p標記以創建我們正在尋找的未嵌套線性標記。

我的問題是,如果有人知道是否有辦法做到這一點相對簡單,如正則表達式或類似的東西,或者如果它通常會更容易回到所有的遺留文件並清理它們達到目前的標準,使它們兼容。 (這是不可取的,因爲我們有很多這些文件,並且不想錯過任何不一致的地方,在我們捕捉它們之前創建格式不正確的Word文檔)。

一般情況下,我們不使用更多的標籤則P,OL/UL /李,EM,強,表/日/ TR/TD,和。我還發現了一些不在任何HTML標籤內的文本,而這些文本最好是用p標籤包裝。

注意:PDF是難以被接受的,因爲我們正在尋找易用性和腳本大小限制通常禁止這一點。

+3

你發現的是,你不能用正則表達式解析HTML。你需要一個全面的HTML解析器。 – Pointy 2011-02-14 15:56:33

+0

@Pointy不要。甚至。走。那裏。:) – 2011-02-14 15:58:03

回答

1

我發現做到這一點,最簡單的方法是去除內容的結束標記,然後取出第一個標籤,以及。用通用部分結束標籤替換每個開始標籤,後跟相應的開頭部分標籤。最後,分別將第一個開始標記和最後一個結束標記附加到內容的開始和結束處,現在它工作正常。謝謝大家的幫助。

2

我建議使用像htmLawed這樣的HTML庫去除你不想處理的標籤。

http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/

從他們的功能列表一個片段:

* understands improperly spaced tag content (like, spread over more than a line) and properly spaces them ` 
    * attempts to balance tags for well-formedness ^~` 
    * understands when omitable closing tags like </p> (allowed in HTML 4, transitional, e.g.) are missing ^~` 
    * attempts to permit only validly nested tags ^~` 
    * option to remove or neutralize bad content ^~` 
    * attempts to rectify common errors of plain-text misplacement (e.g., directly inside blockquote) ^~`