Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / тэги ушли на север ! HTMLEditorKit Parser handleStartTag / handleEndTag / 1 сообщений из 1, страница 1 из 1
16.11.2005, 18:18
    #33382426
Nagel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
тэги ушли на север ! HTMLEditorKit Parser handleStartTag / handleEndTag
Отлаживаю прогу для получения данных из ХТМЛ страниц (преобразование в строковый двухмерный массив - ну а его родимого уже элементарно проанализировать) и встретил интересную особенность. У себя на компе все работает на ура - JRE 1.5, 1.3 (взял из клиентского инстала Oracle), 1.2.
То есть: тэги таблицы (<table>, <tr>, <td>) обрабатываются handleStartTag / handleEndTag.
Довольный собой и проделанной работой, пренес это в хранимую процедуру на Oracle.
Получил следующее: тэги таблицы обрабатываются handleSimpleTag и не всегда - через сайт ЦБ на одной из страниц они вообще не видны (http://www.cbr.ru/currency_base/D_print.asp?date_req=15.11.2005).
По поводу ХМЛ на ЦБ я знаю, но шеф настаивает на разборе ХТМЛ. К тому же это только одна из задач.
Версия Oracle:
Oracle9i Enterprise Edition Release 9.2.0.6.0 – Production
На сервере через System.getProperties().list(System.out); пишет:
java.version=1.3.1 ?!?
В форуме по Oracle мне ничего не ответили (ничего не сказала Золотая Рыбка, махнула хвостом и уплыла в синее море...)
Кто встречался с подобной проблемой ? Может кто уже решил ее другим парсером (врсию Явы на сервере обновить нельзя по условию). Может кто знает какая версия Явы стоит на сервере и почему такой результат ?
Привожу простенький пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
 import  java.io.FileInputStream;
 import  java.io.BufferedReader;
 import  java.io.InputStream;
 import  java.io.InputStreamReader;
 import  java.net.HttpURLConnection;
 import  java.net.URL;
 import  javax.swing.text.MutableAttributeSet;
 import  javax.swing.text.html.HTML;
 import  javax.swing.text.html.HTMLEditorKit;
 import  javax.swing.text.html.parser.ParserDelegator;
 import  sun.misc.BASE64Encoder;
 public   class  testparse {
	 public   static   void  main(String[] args) {
		 boolean  l_inet = true;
		 boolean  l_parse = true;
		InputStream is;
		HttpURLConnection l_con =  null ;
		 if  ( l_inet )
		{
			System.getProperties().put("proxySet", "true");
			System.getProperties().put("proxyHost", "999.999.999.999");
			System.getProperties().put("proxyPort", "9999");
		}
		 try 
		{
			 if  ( l_inet )
			{
				String l_host = "http://www.cbr.ru/currency_base/D_print.asp?date_req=15.11.2005";
				URL l_url =  new  URL(l_host);
				l_con = (HttpURLConnection) l_url.openConnection();
				// set auth by proxy
				BASE64Encoder l_enc =  new  BASE64Encoder();
				String l_encUP = l_enc.encode("uswer:passwd".getBytes());
				l_con.setRequestProperty("Proxy-Authorization", "Basic " + l_encUP);
				
				is = l_con.getInputStream();
			}
			 else 
			{
				// may test from file
				is =  new  FileInputStream( "test10.htm" );;
			}
			InputStreamReader isr =  new  InputStreamReader(is);
			BufferedReader br =  new  BufferedReader(isr);
			HTMLEditorKit.ParserCallback callback = 
		    	 new  HTMLEditorKit.ParserCallback () 
		    {
		    	 public   void  handleText( char [] data,  int  pos) 
		    	{
		    		String l_tmp =  new  String(data);
		    		System.out.println( "*text " + l_tmp );
		    	}
		    	 public   void  handleStartTag(HTML.Tag t, MutableAttributeSet a,  int  pos) 
		    	{
		    			System.out.print( " +tag :" + t );
		    			System.out.println( ", atr :" + a );
		    	}
		    	 public   void  handleEndTag(HTML.Tag t,  int  pos) 
		    	{
		    			System.out.println( " -tag :" + t );
		    	}
		    	 public   void  handleSimpleTag(HTML.Tag t, MutableAttributeSet a,  int  pos) 
		    	{
		    			System.out.print( " =stag :" + t );
		    			System.out.println( ", atr :" + a );
		    	}
		    	 public   void  handleError(String errorMsg,  int  pos)
		    	{
//		    		System.out.println( "$error " + errorMsg );
		    	}
		    };
		     if  ( l_parse )
		    {
		    	HTMLEditorKit.Parser parser =  new  ParserDelegator();
		    	parser.parse(br, callback, true);
		    }
		     else 
		    {
		    	String l_line;
		    	 while  ((l_line = br.readLine()) !=  null )
	    			  System.out.println(l_line);
		    }
		    br.close();
			isr.close();
			is.close();
			 if  ( l_inet )
				l_con.disconnect();
		}
		 catch  (Exception e) {e.printStackTrace();}
	}
}
Из Oracle выдается следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SQL> exec testparse
+tag :html, atr :
 +tag :head, atr :
 +tag :title, atr :
*text База данных по курсам валют | Банк России
 -tag :title
 +tag :link, atr :rel=stylesheet type=text/css href=/style.css 
 -tag :link
 -tag :head
 +tag :p, atr :endtag=true src=/images/logo_bigtables.gif href=/ border=0 align=center alt= 
 -tag :p
 -tag :html

PL/SQL procedure successfully completed 
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / тэги ушли на север ! HTMLEditorKit Parser handleStartTag / handleEndTag / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]