68669


### 前提・実現したいこと

今Java8で入力値のテキストに対して、HTMLバリデーションを実装しています。HTMLタグが入力されている際の開始タグ終了タグチェックです。  
たとえば`<b>aiueo`なら`</b>`がないのでエラー、`aiueo</b>`なら`<b>`がないのでエラー、`<b>aiueo</b>`ならエラーなしです。

**このチェックをApacheグループのライブラリで実現できるものはないでしょうか？**  
同じことをやりたい人は世界中にいると思うので。

終了タグが必要なタグは候補として出せているので、シンプルに  
「開始タグ終了タグ」チェックのロジックを実装したいです。  
ただしAPI側の実装なのであくまでJava側での実装になります。

わかる方はいらっしゃいますでしょうか？アイデアやヒント、キッカケ、予想でも構いません。  
よろしくお願いいたします。

### 背景

商品説明のテキストボックスにHTMLも入力できますが、その際のバリデーション機能をつけることを任されています。  
ただし、実装する箇所はAPI側なので、Javaでの実装になります。  
また正規表現ではじめ実装していましたが、責任者からパフォーマンスの問題から正規表現はやめてほしいと言われました。  
チェックしたい内容は  
①あらかじめ終了タグが必要な対象のタグはラインナップされており、そのタグの場合終了タグが必要（a,table,bなど）  
②終了タグがあり、開始タグがない場合もエラー  
③属性やコメントタグに終了タグの文字列が入っているケースも考慮する。チェックしないように。  
④入れ子や複数タグがある場合も対応できるようにする

### 意図

とくに②〜④についてどうしたらできるかなと思いました。  
あとはより良い実装方法はないかと思いました。

### 試したこと

こちらのページを参考にし、実装しています。  
[http://www5b.biglobe.ne.jp/~taka_2/jclass/Stack.html](http://www5b.biglobe.ne.jp/%7Etaka_2/jclass/Stack.html)  
ただ終了タグがあって、開始タグがないケースもチェックしたいし、コメントになっている箇所はチェック対象からは外したいので、そのケースをどう追加しようかなと思っています。

<https://java-source.net/open-source/html-parsers>  
またこのページも勉強しています。使えるクラスはないかと。どのように使うのかと。

HTML parserも使ってみました。しかし解決までには至りませんでした。


CC BY-SA 4.0
2020-07-17T03:45:55.720
68664
2020-07-17T06:03:53.077
40231
question
java java8
Apacheで閉じタグチェックのHTMLバリデーションができるライブラリはないでしょうか？


こんにちは、正規表現を避けるとなると、SAXパーサーを用いる手段が考えられます。

ApacheプロジェクトだとXercesが有名ですが、

<http://xerces.apache.org/xerces2-j/>

XMLの仕様に準拠していないとまずいみたいなので、HTMLに対応したほかのパーサーを使うのがよいかもしれません。調べた感じはvalidator.nuなどが検索にかかりました。

<https://github.com/w3c/markup-validator/>  
<https://validator.nu/>  
<https://about.validator.nu/htmlparser/>

というか正規表現であれこれより、重い可能性もありますね。  
処理速度が問題になる場合は、軽量なSAX形式のHTMLパーサーがあればためされてはいかがでしょう(おそらく作りこみが必要になりますが)。

<https://github.com/apexmob/skink>


CC BY-SA 4.0
2020-07-17T05:56:28.380
68669
2020-07-17T06:03:53.077
2020-07-17T06:03:53.077
37777
37777
68664
answer