![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Sleepy_PIP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 30.6.2004 Где: Moscow Репутация: 4 Всего: 12 |
в Java я пока чайник ... не пинайте сильно!
Тут вот есть необходимость работать с html. надо его парсить и получать из него как минимум все ссылки. Нашел на http://javaalmanac.com пример: try { URL url= new URI("file:////c://ttt.html").toURL(); URLConnection conn=url.openConnection(); Reader rd= new InputStreamReader(conn.getInputStream()); EditorKit kit= new HTMLEditorKit(); HTMLDocument doc=(HTMLDocument)kit.createDefaultDocument(); try { kit.read(rd, doc, 0); } catch(ChangedCharSetException ee) { }; HTMLDocument.Iterator it=doc.getIterator(HTML.Tag.A); while(it.isValid()) { SimpleAttributeSet s = (SimpleAttributeSet)it.getAttributes(); String link=(String)s.getAttribute(HTML.Attribute.HREF); if(link !=null) System.out.println(link); } } catch (Exception E) { System.out.println(E.toString()); } } ну пробую с ним работать - и полное фиаско. сначала на kit.read(rd, doc, 0); выскакивал эксепшен ChangedCharSetException , покопавшись в сорцах нашел что это нормально и надо его вообщем-то обходить. обошел, так теперь it.isValid() - false всегда, а входной стрим при попытке с ним работать дает IOException с расшифровкой Closed stream ... А как-же быть? я пока не разобрался во всех тонкостях работы с html и на примере как раз хотел разбираться, а он оказывается не рабочий Подскажите в чем дело, а? Спасибо! -------------------- -- Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем свободным ..." |
|||
|
||||
| rni |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 10.3.2004 Репутация: 1 Всего: 3 |
Наверное стоит почитать про JEditorPane. Он сам парсит HTML. К нему добавляют класс-слушатель HyperLinkListener. Удачи
--------------------
r-xr-xr-x 3 мусорных ведра корня 14312 9 января 2000 perl |
|||
|
||||
| Sleepy_PIP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 30.6.2004 Где: Moscow Репутация: 4 Всего: 12 |
так оттуда и взято (JEditorPane.java):
===================== .... * <p> * There are multiple ways to get a character set mapping to happen * with <code>JEditorPane</code>. * <ol> * <li> * One way is to specify the character set as a parameter of the MIME * type. This will be established by a call to the * <a href="#setContentType">setContentType</a> method. If the content * is loaded by the <a href="#setPage">setPage</a> method the content * type will have been set according to the specification of the URL. * It the file is loaded directly, the content type would be expected to * have been set prior to loading. * <li> * Another way the character set can be specified is in the document itself. * This requires reading the document prior to determining the character set * that is desired. To handle this, it is expected that the * <code>EditorKit</code>.read operation throw a * <code>ChangedCharSetException</code> which will * be caught. The read is then restarted with a new Reader that uses * the character set specified in the <code>ChangedCharSetException</code> * (which is an <code>IOException</code>). * </ol> * <p> * <dt><b><font size=+1>Newlines</font></b> * <dd> * For a discussion on how newlines are handled, see * <a href="text/DefaultEditorKit.html">DefaultEditorKit</a>. * </dl> * * <p> .... ===================== так вот как мне - " * One way is to specify the character set as a parameter of the MIME * type. " - я не нашел подходящих методов ни в HTMLDocument ни в EditorKit или как мне - " * Another way the character set can be specified is in the document itself. * This requires reading the document prior to determining the character set * that is desired. To handle this, it is expected that the * <code>EditorKit</code>.read operation throw a * <code>ChangedCharSetException</code> which will * be caught. The read is then restarted with a new Reader that uses ..." как мне его рестартовать (без перезакачивания с инета), если стрим уже closed (что кстати определить то-ж проблемматично - после kit.read(rd, doc, 0); любая операция со стримом приводит к IOExceptiuon, и определить что этот эксепшен всего-то на stream closed можно только по анализу строки эксепшена - ну не маразм? вот такие проблеммы. Может у кого есть _рабочие_ примеры, а? Спасибо! PS: интересно - проблемма то вообщем простая, а ни примеров, ни доков толковых ... в книжках этого просто нет ... и что каждый раз в сорцы ходить? ... че-то не так в этом супе -------------------- -- Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем свободным ..." |
|||
|
||||
| Andyb |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 7.6.2004 Где: Lille, France Репутация: 4 Всего: 5 |
По поводу всех ссылок - посмотри вот эту прогу, может что-нибудь пригодится:
--------------------
Большинство наших ошибок происходит из-за невнимательности. |
|||
|
||||
| Sleepy_PIP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 30.6.2004 Где: Moscow Репутация: 4 Всего: 12 |
Кстати оказалось все просто. не совсем полное решение задачи - частичное только, но тем не менее мне хватает.
а именно - надо сделать следущее: после HTMLDocument doc=(HTMLDocument)kit.createDefaultDocument(); сказать: doc.putProperty("IgnoreCharsetDirective",Boolean.TRUE); и все ... пока все -------------------- -- Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем свободным ..." |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |