我通過this鏈接將sgml內容轉換爲xml內容。 使用sgmlString.replaceAll("<(([^<>]+?)>)([^<>]+?)(?=<(?!\\1))", "<$1$3</$2>");
正則表達式我幾乎接近預期結果,但對於以下文件,當有多個並行標記沒有關閉時,它將僅關閉最後一個標記的標記。將SGML轉換爲XML的正則表達式
輸入:
<SEC-HEADER>0001104659-17-052330.hdr.sgml : 20170817
<ACCEPTANCE-DATETIME>20170817060417
<ACCESSION-NUMBER>0001104659-17-052330
<TYPE>8-K
<PUBLIC-DOCUMENT-COUNT>4
<PERIOD>20170816
<ITEMS>7.01
<ITEMS>8.16
<FILING-DATE>20170817
<DATE-OF-FILING-DATE-CHANGE>20170817
<FILER>
bye bye see you!
</FILER>
</SEC-HEADER>
輸出(注:僅ITEMS標籤的一個關閉和FILER兩個倒閉,預計不會)
<SEC-HEADER>0001104659-17-052330.hdr.sgml : 20170817
<ACCEPTANCE-DATETIME>20170817060417</ACCEPTANCE-DATETIME>
<ACCESSION-NUMBER>0001104659-17-052330</ACCESSION-NUMBER>
<TYPE>8-K</TYPE>
<PUBLIC-DOCUMENT-COUNT>4</PUBLIC-DOCUMENT-COUNT>
<PERIOD>20170816</PERIOD>
<ITEMS>7.01<ITEMS>8.16</ITEMS>
<FILING-DATE>20170817</FILING-DATE>
<DATE-OF-FILING-DATE-CHANGE>20170817</DATE-OF-FILING-DATE-CHANGE>
<FILER>bye bye see you!</FILER></FILER>
</SEC-HEADER>
預計:
<SEC-HEADER>0001104659-17-052330.hdr.sgml : 20170817
<ACCEPTANCE-DATETIME>20170817060417</ACCEPTANCE-DATETIME>
<ACCESSION-NUMBER>0001104659-17-052330</ACCESSION-NUMBER>
<TYPE>8-K</TYPE>
<PUBLIC-DOCUMENT-COUNT>4</PUBLIC-DOCUMENT-COUNT>
<PERIOD>20170816</PERIOD>
<ITEMS>7.01</ITEMS>
<ITEMS>8.16</ITEMS>
<FILING-DATE>20170817</FILING-DATE>
<DATE-OF-FILING-DATE-CHANGE>20170817</DATE-OF-FILING-DATE-CHANGE>
<FILER>bye bye see you!</FILER>
</SEC-HEADER>
我需要你的友好建議/指導,對下列查詢:
- 是否使用正則表達式用於獲取結束標記,使其在XML格式的好方法,因爲我讀正則表達式很慢?
- 我有相當繁重的文件處理(最多18000行/標籤),有沒有更好的方法來實現它?
- 如何在正則表達式改變獲得期望的結果(我真的弱EL)
我可以建議你看看使用XSLT,從我的理解來看,它可能非常適合這種XML轉換問題?我認爲在這裏使用正則表達式會引發問題,尤其是嵌套標記。 –
我不知道XSLT以及如何使用它。您能否提供一些指南/工作示例的鏈接或其他可供參考的鏈接。感謝您的快速回復。 –
@TimBiegeleisen對於任何尚未完成的任何事情,XSLT不會失敗嗎? – Yunnosch