2016-12-05 7 views
1

例:検証し、JavaでXMLで余分な終了タグを削除

<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になります。

あなたが登りたい山の大きさを正確に感じることを願っています。

[*]正規表現が仕事をするかもしれないと思っていたことから、あなたはこれについてあまり知らないと思いました。

関連する問題