2016-12-05 42 views
1

實施例:驗證併除去以xml任何無關的結束標記在Java

<Module name="IOWData"> 
       *</VERSION>* 
       <ACQ>   PAR  </ACQ> 
       <RECON>   PUP  </RECON> 
      <Group name="PAR"> 
       <HEALTHSTATUS>   OK  </HEALTHSTATUS> 
      </Group> 
</Module> 

我想刪除任何無關的結束標記,即還沒有被在XML(打開如圖中示例的結束標記 - 版本標籤)。

注:它可以是整個XML的任何地方的任何標籤。此外,XML是巨大的我不希望加載整個XML在內存中。

以下思路我:

  1. 正則表達式:如果我可以使用正則表達式來解決這個問題。但是,如何檢查關閉和打開檢查的標籤名稱,我需要幫助。

  2. 使用XSD。但是如何?

希望我很清楚並渴望有效的解決方案。 謝謝!

回答

0

首先,不要把它稱爲XML。它不是XML。如果您將其稱爲非XML,那麼這將有助於確立設計用於處理XML的工具不會對您有任何用處的想法。

既然你要解析語言不是XML,並且沒有解析器該語言當前不存在,你將不得不學習如何編寫解析器[*]。這是每個計算機科學課程和任何編譯器教科書都涵蓋的主題,但在您閱讀了一些關於該理論的內容之前,這不是一種嘗試。

一旦你知道如何開始編寫一個解析器,最好的辦法是記下要解析的語法的BNF,這基本上是XML語法和雜散結束標記的選項。你將有一個識別標籤(包括流浪者)的詞法分析器,並將它們推送到一個語法分析器,它可以完成匹配標籤名稱的工作(儘管這在技術上是用編譯器編寫的術語,語義而不是語法)。然後,您只需確定流失並將其從傳遞到下一個處理階段的事件流中刪除,這可以是標準的SAX ContentHandler。

我希望給你你想要去爬山的大小精確的感覺。

[*]我猜你不知道太多關於這個從你以爲正則表達式可以做這項工作的事實。