作業部屋の使い方を試しています。
HTML属性の取得方法を考える。
| @@ -183,11 +183,11 @@ | ||
| 183 | 183 | jPanel2.setLayout(jPanel2Layout); |
| 184 | 184 | jPanel2Layout.setHorizontalGroup( |
| 185 | 185 | jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
| 186 | - .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 387, Short.MAX_VALUE) | |
| 186 | + .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 532, Short.MAX_VALUE) | |
| 187 | 187 | ); |
| 188 | 188 | jPanel2Layout.setVerticalGroup( |
| 189 | 189 | jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
| 190 | - .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 117, Short.MAX_VALUE) | |
| 190 | + .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 156, Short.MAX_VALUE) | |
| 191 | 191 | ); |
| 192 | 192 | |
| 193 | 193 | jMenu1.setText("ファイル"); |
| @@ -29,14 +29,14 @@ | ||
| 29 | 29 | import javax.swing.text.html.HTMLEditorKit; |
| 30 | 30 | |
| 31 | 31 | /** |
| 32 | - * | |
| 32 | + * HTMLパーサ部品. | |
| 33 | 33 | * @author kgto |
| 34 | 34 | */ |
| 35 | 35 | public class HtmlParserCallback extends HTMLEditorKit.ParserCallback { |
| 36 | 36 | |
| 37 | 37 | // デバック情報表示フラグ |
| 38 | - //final boolean DEBUG = false; | |
| 39 | - final boolean DEBUG = true; | |
| 38 | + final boolean DEBUG = false; | |
| 39 | + //final boolean DEBUG = true; | |
| 40 | 40 | |
| 41 | 41 | // Tag毎の階層 |
| 42 | 42 | HashMap<HTML.Tag,Integer> tagMap = new HashMap<>(); |
| @@ -49,7 +49,6 @@ | ||
| 49 | 49 | // serach key と一致時の情報退避 |
| 50 | 50 | int bufCount = 0; |
| 51 | 51 | HTML.Tag bufTag = null; |
| 52 | - MutableAttributeSet bufAttr = null; | |
| 53 | 52 | // serach key と一致時の情報格納ワーク |
| 54 | 53 | StringBuilder bufText; |
| 55 | 54 |
| @@ -104,13 +103,12 @@ | ||
| 104 | 103 | |
| 105 | 104 | if(bufCount == 0) { |
| 106 | 105 | if(tag.toString().equals(keytag)) { |
| 107 | - if(serachAttribute(attr)) { | |
| 106 | + //if(serachAttribute(attr)) { | |
| 107 | + if(serachAttribute(tag, handleStartattrdata)) { | |
| 108 | 108 | bufCount = count; |
| 109 | 109 | bufTag = tag; |
| 110 | - bufAttr = attr; | |
| 110 | + attrdata = new AttributeData(); | |
| 111 | 111 | bufText = new StringBuilder(); |
| 112 | - | |
| 113 | - attrdata = new AttributeData(); | |
| 114 | 112 | } |
| 115 | 113 | } |
| 116 | 114 | } |
| @@ -155,7 +153,6 @@ | ||
| 155 | 153 | // 退避したserach keyとの一致情報クリア |
| 156 | 154 | bufCount = 0; |
| 157 | 155 | bufTag = null; |
| 158 | - bufAttr = null; | |
| 159 | 156 | bufText = null; |
| 160 | 157 | } |
| 161 | 158 |
| @@ -244,4 +241,28 @@ | ||
| 244 | 241 | |
| 245 | 242 | return false; |
| 246 | 243 | } |
| 244 | + | |
| 245 | + /** | |
| 246 | + * ページ内のID/CLASS値と検索キーを比較する. | |
| 247 | + * @param tag | |
| 248 | + * @param attrdata | |
| 249 | + * @return boolean 検索キーと一致の時、true | |
| 250 | + */ | |
| 251 | + public boolean serachAttribute(HTML.Tag tag, AttributeData attrdata) { | |
| 252 | + // ID と CLASS の両方にキー入力有りの場合 | |
| 253 | + if(keyid.isEmpty() == false && keyclass.isEmpty() == false) { | |
| 254 | + if(attrdata.searchId(tag, keyid) && attrdata.searchClass(tag, keyclass)) { | |
| 255 | + return true; | |
| 256 | + } | |
| 257 | + } | |
| 258 | + // ID のキーチェック | |
| 259 | + if(keyid.isEmpty() == false) { | |
| 260 | + return attrdata.searchId(tag, keyid); | |
| 261 | + } | |
| 262 | + // CLASS のキーチェック | |
| 263 | + if(keyclass.isEmpty() == false) { | |
| 264 | + return attrdata.searchClass(tag, keyclass); | |
| 265 | + } | |
| 266 | + return false; | |
| 267 | + } | |
| 247 | 268 | } |