Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Roborock Saros 20: il robot preciso e molto sottile
Roborock Saros 20: il robot preciso e molto sottile
Il nuovo robot di Roborock per l'aspirazione della polvere e il lavaggio dei pavimenti spicca per immediatezza d'uso e per l'efficacia dell'azione, grazie anche a un ridotto sviluppo in altezza. Saros 20 integra un motore da ben 36.000Pa di potenza e un sistema di lavaggio a due panni rotanti, con bracci estensibili e un sistema di navigazione molto preciso.
ASUS ROG Kithara: quando HIFIMAN incontra il gaming con driver planari da 100mm
ASUS ROG Kithara: quando HIFIMAN incontra il gaming con driver planari da 100mm
ASUS e HIFIMAN uniscono le forze per creare ROG Kithara, cuffie gaming con driver magnetici planari da 100mm, design open-back e microfono MEMS full-band. Una proposta che ambisce a coniugare fedeltà per audiofili e performance ludiche, disponibili a 319 euro
Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Qrevo Curv 2 Flow è l'ultima novità di casa Roborock per la pulizia di casa: un robot completo, forte di un sistema di lavaggio dei pavimenti basato su rullo che si estende a seguire il profilo delle pareti abbinato ad un potente motore di aspirazione con doppia spazzola laterale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-03-2006, 18:44   #1
gaglioppo
Senior Member
 
L'Avatar di gaglioppo
 
Iscritto dal: Sep 2002
Città: Monza
Messaggi: 598
[java-html] da nodo ad html

ciao amici,

ho un albero DOM contenente una pagina html, mi servirebbe, a partire da un nodo visualizzare in un pannello il ramo scelto, così come si visualizzarebbe su un browser.


grazie
__________________
Nunc est bibendum
gaglioppo è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2006, 09:24   #2
gaglioppo
Senior Member
 
L'Avatar di gaglioppo
 
Iscritto dal: Sep 2002
Città: Monza
Messaggi: 598
up
__________________
Nunc est bibendum
gaglioppo è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2006, 10:05   #3
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Ciao,
hai provato con JEditorPane? Dovrebbe fare al caso tuo.

High Flying
Sottovento
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2006, 11:12   #4
gaglioppo
Senior Member
 
L'Avatar di gaglioppo
 
Iscritto dal: Sep 2002
Città: Monza
Messaggi: 598
con JEditorPane è semplice, ci passo la pagina html
facendo:
jpannello.setPage("pagina.html")

e mi visualizza la pagina

Il mio problema è che ho un albero DOM, in cui ogni nodo è un tag.
Al limite la mia idea sarebbe quella di:

- parsare la pagina html e creare l'albero
- scorrere la lista dei nodi e man mano creare delle stringhe con l'html relativo
- poi passare queste stringhe una ad una al jeditorpane (sempre se si puà fare senza mettere la stringa in un file) e visualizzare l'elemento

La ciliegina sulla torna sarebbe quella di definire per alcuni tag particolari (ad esempio tutte le immagini) un listener per il click del mouse.
L'utente clicca sull'immagine del browser cosi' fatto e si apre una schermata in cui posso eseguire delle operazioni.

La cosa mi pare complessa, ma pian piano potrei riuscirci

grazie e a presto

p.s. devo essere piu' dettagliato?
__________________
Nunc est bibendum
gaglioppo è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2006, 11:43   #5
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da gaglioppo
con JEditorPane è semplice, ci passo la pagina html
facendo:
jpannello.setPage("pagina.html")

e mi visualizza la pagina

Il mio problema è che ho un albero DOM, in cui ogni nodo è un tag.
Al limite la mia idea sarebbe quella di:

- parsare la pagina html e creare l'albero
- scorrere la lista dei nodi e man mano creare delle stringhe con l'html relativo
- poi passare queste stringhe una ad una al jeditorpane (sempre se si puà fare senza mettere la stringa in un file) e visualizzare l'elemento

La ciliegina sulla torna sarebbe quella di definire per alcuni tag particolari (ad esempio tutte le immagini) un listener per il click del mouse.
L'utente clicca sull'immagine del browser cosi' fatto e si apre una schermata in cui posso eseguire delle operazioni.

La cosa mi pare complessa, ma pian piano potrei riuscirci

grazie e a presto

p.s. devo essere piu' dettagliato?
No, sei stato sufficientemente dettagliato, e c'e' da dire che hai le idee piuttosto chiare. A questo punto mi sembra che ce la possa fare tranquillamente, no?

Analizzando i punti che hai descritto:
- parsare la pagina html e creare l'albero: hai l'albero DOM (era la parte piu' difficile da fare), quindi l'hai risolto. A proposito, c'e' gia' qualcosa in libreria che lo fa?

- scorrere la lista dei nodi e man mano creare delle stringhe con l'html relativo. Si tratta di una visita in preordine. Potresti sfruttare il metodo toString() in modo che ognuno ritorni il suo pezzo html. Dovrebbe essere semplice e fattibile in poco tempo;

- poi passare queste stringhe una ad una al jeditorpane (sempre se si puà fare senza mettere la stringa in un file) e visualizzare l'elemento. Si puo' fare senza mettere la stringa in un file. Comunque non sei obbligato ad usare il jeditorpane: se il tuo problema e' solo la visualizzazione, qualsiasi oggetto Swing e' in grado di farlo.
Per esempio:

JLabel lbl = new JLabel ("<html><body><font color=red>Hello, world</font></body></html>");

crea una JLabel con la scritta "Hello, world" in rosso, determinata dai tag html.

Ricordati che se vuoi visualizzare solo dei pezzi, questo non vale: devi prendere il pezzo che vuoi visualizzare e racchiuderlo nei tag <html>...</html> (non sono sicuro che anche <body>...</body> sia necessario)

High Flying
Sottovento
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2006, 15:18   #6
gaglioppo
Senior Member
 
L'Avatar di gaglioppo
 
Iscritto dal: Sep 2002
Città: Monza
Messaggi: 598
procediamo con ordine:

1. per prendere una pagina html e scaricarla in un albero dom uso NekoHtml (c'è pure JTidy). In pratica basta creare un parser e scaricargli la pagina:
Fa tutto lui, tu devi solo scorrere i nodi (Node) con un while.
(se ti serve ti posso mandare il link della libreria o i miei files)

2. Dalla classe Node riesco ad ottenere tutte le informazioni relative ad ogni tag html. Ad esempio, se ho un tag INPUT, posso interrogare il nodo ed ottenere tutti gli attributi, da un tag di questo tipo:
<INPUT type="text" name="pippo" value="giorgio" personale="ciccillo">
posso ricevere in una stringa tutti i singoli campi.

3. Il problema è ricevere l'html di quel nodo, sempre se sia possibile fare, e forse nn lo è. Mi viene da pensare questo:
Se considero il nodo <table .... > questo contiene tutti gli attributi (anche nessuno), ma contiene solo il riferimento ai vari tag <tr> che a loro volta contengono i riferimenti ai tag <td> che a loro volta possono contenere qualsiasi altro tag.

4. Secondo me dovrei, per ogni nodo, catturare l'html. Esempio: da un nodo table dorei ottenere la Stringa:

String a="<TABLE ALIGN="left" BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%">";

e quindi scandire tutti i nodi.
Devo trovare qualche cosa che mi aiuti a costruirli. Ci penso.

5. Se risolvo a risolvere ciò che ho detto nel punto 4 ed è vero che con jLabel posso visualizzare porzioni di html (ora verifico per bene), non mi resta che creare il listener che mi consenta di cliccare sull'elemento scelto. Ad esempio, se clicco sull'elemento <IMG....> si potrebbe aprire una finestra di popup che mi restituisca il percorso ed il nome dell'immagine.
(sui listener sono ancora scarso, pensi sia difficile realizzarne uno che faccia questo? come?)
__________________
Nunc est bibendum
gaglioppo è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2006, 15:52   #7
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da gaglioppo
procediamo con ordine:

1. per prendere una pagina html e scaricarla in un albero dom uso NekoHtml (c'è pure JTidy). In pratica basta creare un parser e scaricargli la pagina:
Fa tutto lui, tu devi solo scorrere i nodi (Node) con un while.
(se ti serve ti posso mandare il link della libreria o i miei files)

2. Dalla classe Node riesco ad ottenere tutte le informazioni relative ad ogni tag html. Ad esempio, se ho un tag INPUT, posso interrogare il nodo ed ottenere tutti gli attributi, da un tag di questo tipo:
<INPUT type="text" name="pippo" value="giorgio" personale="ciccillo">
posso ricevere in una stringa tutti i singoli campi.

3. Il problema è ricevere l'html di quel nodo, sempre se sia possibile fare, e forse nn lo è. Mi viene da pensare questo:
Se considero il nodo <table .... > questo contiene tutti gli attributi (anche nessuno), ma contiene solo il riferimento ai vari tag <tr> che a loro volta contengono i riferimenti ai tag <td> che a loro volta possono contenere qualsiasi altro tag.

4. Secondo me dovrei, per ogni nodo, catturare l'html. Esempio: da un nodo table dorei ottenere la Stringa:

String a="<TABLE ALIGN="left" BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%">";

e quindi scandire tutti i nodi.
Devo trovare qualche cosa che mi aiuti a costruirli. Ci penso.

5. Se risolvo a risolvere ciò che ho detto nel punto 4 ed è vero che con jLabel posso visualizzare porzioni di html (ora verifico per bene), non mi resta che creare il listener che mi consenta di cliccare sull'elemento scelto. Ad esempio, se clicco sull'elemento <IMG....> si potrebbe aprire una finestra di popup che mi restituisca il percorso ed il nome dell'immagine.
(sui listener sono ancora scarso, pensi sia difficile realizzarne uno che faccia questo? come?)
Ciao,
1 - Non conoscevo affatto quella libreria. E' davvero molto bella! Se puoi pubblicare il link, penso che faresti la felicita' non solo mia ma di tante altre persone;

2 - Quando hai il documento in un albero DOM, e' facilmente modificabile. Da quello che ho capito vorresti STAMPARE (in stringa, a video, in un file, ...) il contenuto in formato html, giusto?
Non so come l'albero DOM sia stato creato, ma da quanto mi hai detto mi sono fatto un'idea.
Potresti partire, per esempio, da una visita in preordine, stampando ricorsivamente non solo il nodo, ma anche i suoi sottonodi, ottenendo la porzione di pagina.

Un esempio (non prenderlo come codice funzionante, non l'ho provato e mancano anche dei pezzi) potrebbe essere:

public String printNode (Node node)
{
String name = node.getNodeName (); // Get the node name

String attributes = getAttributes (node); // Just scan attributes and print in form NAME=VALUE

String startTag = "<" + name + " " + attributes + ">";
String childTags = "";
// Now you have to scan all children!!!
NodeList nodeList = node.getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++)
{
Node child = nodeList.item (i);
childTags += printNode (child);
}
String endTag = "</" + name + ">";

return startTag + childTags + endTag;
}

Se ho capito il tuo problema, questo dovrebbe essere sufficiente. Ovviamente e' solo uno schema, poiche' ci sono dei tag che non devono essere chiusi, non leggo le entita' Text e cosi' via.
Modificando questo potresti ottenere il tuo codice finale.

Se invece sono andato fuori tema.... OPS, scusami!!!

5 - La JLabel ti permette di visualizzare, come ti ho mostrato prima. La stessa cosa vale, per esempio, per i JButton e tutti gli altri controlli. Naturalmente se vuoi seguire dei link e' un'altra cosa.


Spero che ti sia di aiuto

High Flying
Sottovento
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2006, 17:08   #8
gaglioppo
Senior Member
 
L'Avatar di gaglioppo
 
Iscritto dal: Sep 2002
Città: Monza
Messaggi: 598
Allora, io sto usando NekoHtml:
http://java-source.net/open-source/h...rsers/nekohtml

ma c'è pure JTidy:
http://jtidy.sourceforge.net/

Creare l'albero e scorrerlo è semplicissimo:

Codice:
DOMParser parser = new DOMParser();
parser.parse(UrlSottoFormaDiStringa);
// a questo punto l'abero è già creato

LeggiAlbero(parser.getDocument());
....

public static void LeggiAlbero(Node node){
		String NomeTagHtml = "" + node.getNodeName();
		Node child = node.getFirstChild();
		while (child != null) {
			LeggiAlbero(child);
			child = child.getNextSibling();
		}
}
Per quanto riguarda il tuo pezzo di pseudo-codice è quello che mi ero augurato di nn scrivere :-)
In realtà sarei interessato a pochi tipi di tag e mi starebbe anche bene crearmeli.... vediamo se troviamo una soluzione più rapida.
Non so se per i tag tipo Table che hanno un inizio ed una fine sia possibile seguire l'albero per chiuderlo ...hum.... a livello di efficienza come stiamo messi?
__________________
Nunc est bibendum
gaglioppo è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2006, 17:15   #9
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Grazie per i link, scarico subito. Non ne sapevo nemmeno l'esistenza, di una libreria cosi!

Per quanto riguarda il codice...beh, si tratta di un lavoro onesto, te la cavi con una cinquantina di righe. Un'altra soluzione... non mi viene niente per ora.

L'efficienza non e' malaccio, nonostante la ricorsione possa diventare profondamente innestata. Cmq scandisci gli elementi una sola volta.
Infine... non devi seguire l'albero per chiudere un elemento. Non conosco la libreria, ma a rigor di logica non dovrebbe minimamente servire.

High Flying
Sottovento
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2006, 18:17   #10
gaglioppo
Senior Member
 
L'Avatar di gaglioppo
 
Iscritto dal: Sep 2002
Città: Monza
Messaggi: 598
effettivamente catturare da <table> a </table> potrebbe nn servirmi.

Analizzo la cosa:

parto dall'albero e man mano che incontro un nodo mi creo una stringa, esempio:

nodo 1: String n1="<html>";
...
..
nodo i: String ni="<table.....>";
nodo i+1: String ni2="<tr>";
...

nodo j: String nj="</table>";

una per una queste stringhe andrebbero in dei JLabel:

JLabel jl1=new JLabel(n1);
e verrebbero visualizzati.

Il problema potrebbe essere quello di avere la necessità di avere un blocco intero da <table> a </table> come unica stringa e quindi unico oggetto JLabel da visualizzare....

Ma nn so se mi servirà tutto ciò.....

Per ora sono arrivato a visualizzare pezzi di codice html come verrebbero visualizzati nel browser, con un mouseListener che consente di cliccare sui diversi pezzi di codice e di aprire una finestra di popup....

Piano Piano l'opera si sta completando....

Mi manca il pezzo che porta da nodo a oggetto cliccabile, ma ora sappiamo come realizzarlo.
__________________
Nunc est bibendum
gaglioppo è offline   Rispondi citando il messaggio o parte di esso
Old 14-03-2006, 08:54   #11
gaglioppo
Senior Member
 
L'Avatar di gaglioppo
 
Iscritto dal: Sep 2002
Città: Monza
Messaggi: 598
Problemi:

Usando la JLabel per mostrare l'html vado incontro a grossi problemi
La logica è questa:

JLabel label=new JLabel("<html><body>"+codiceHtmlTag+"</body></html>");

dove codiceHtmlTag contiene il codice html del singolo tag.
Ad esempio:

codiceHtmlTag1="<select name=scelta>";
codiceHtmlTag2="<OPTION selected>";
codiceHtmlTag3="yes";
codiceHtmlTag4="<OPTION>";
codiceHtmlTag5="no";

(dove oltretutto mancano i tag di chiusura)

quindi si ottengono in diversi jLabel:
<html><body><select name=scelta></body></html>
<html><body><OPTION selected></body></html>
<html><body>yes</body></html>
<html><body><OPTION></body></html>
<html><body>no</body></html>

quindi non si ottiene, come vorrei una select con le scritte yes e no, ma
una select vuota e accanto due testi, yes e no, per non parlare dei tag
option che nn vengono visualizzati(chiaramente).

Dovrei raggruppare tag di questo tipo in un'unica stringa da incorporare in una JLabel, ma, per esempio, i tag form, dovrebbero essere divisi per input, textarea, select, radiobutton, checkbox ecc. (ricordo che mi serve una interfaccia in cui è possibile cliccare sui singoli elementi e una form, per i miei scopi, non è un singolo elemento).

A questo punto ci vorrebbe qualcosa di diverso rispetto al JLabel oppure dovrei seguire un'altra strada, nn so.....
__________________
Nunc est bibendum
gaglioppo è offline   Rispondi citando il messaggio o parte di esso
Old 14-03-2006, 09:23   #12
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da gaglioppo
Problemi:

Usando la JLabel per mostrare l'html vado incontro a grossi problemi
La logica è questa:

JLabel label=new JLabel("<html><body>"+codiceHtmlTag+"</body></html>");

dove codiceHtmlTag contiene il codice html del singolo tag.
Ad esempio:

codiceHtmlTag1="<select name=scelta>";
codiceHtmlTag2="<OPTION selected>";
codiceHtmlTag3="yes";
codiceHtmlTag4="<OPTION>";
codiceHtmlTag5="no";

(dove oltretutto mancano i tag di chiusura)

quindi si ottengono in diversi jLabel:
<html><body><select name=scelta></body></html>
<html><body><OPTION selected></body></html>
<html><body>yes</body></html>
<html><body><OPTION></body></html>
<html><body>no</body></html>

quindi non si ottiene, come vorrei una select con le scritte yes e no, ma
una select vuota e accanto due testi, yes e no, per non parlare dei tag
option che nn vengono visualizzati(chiaramente).

Dovrei raggruppare tag di questo tipo in un'unica stringa da incorporare in una JLabel, ma, per esempio, i tag form, dovrebbero essere divisi per input, textarea, select, radiobutton, checkbox ecc. (ricordo che mi serve una interfaccia in cui è possibile cliccare sui singoli elementi e una form, per i miei scopi, non è un singolo elemento).

A questo punto ci vorrebbe qualcosa di diverso rispetto al JLabel oppure dovrei seguire un'altra strada, nn so.....
Ciao,
non penso che tu possa usare la JLabel per QUESTO tipo di codice. La JLabel, come JButton e tutto il resto, utilizzano i tag HTML soltanto per rappresentazione. Quello che tu vorresti fare e' utilizzare i tag html per l'introduzione dei dati. Non dovrebbe essere possibile (uso il condizionale perche' ogni tanto le cose vengono cambiate, ma sono sicuro al 90%).

Per quanto riguarda il codice che hai prodotto, probabilmente esiste un modo diverso per produrlo. Se hai gli item in un albero DOM, posso scommettere che le varie OPTION sono figlie della SELECT, pertanto una scansione ricorsiva di quel punto dell'albero ti risolve il problema.

Tornando al problema principale: vorresti poter leggere le scelte dell'utente
mediante i tag html. Si tratta di una funzionalita' "da browser". Sicuramente una JLabel non e' sufficiente, e comincio a nutrire dei dubbi sulla JEditorPane.

Forse e' il caso di cercare una libreria su Internet....

High Flying
Sottovento
sottovento è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Roborock Saros 20: il robot preciso e molto sottile Roborock Saros 20: il robot preciso e molto sott...
ASUS ROG Kithara: quando HIFIMAN incontra il gaming con driver planari da 100mm ASUS ROG Kithara: quando HIFIMAN incontra il gam...
Roborock Qrevo Curv 2 Flow: ora lava con un rullo Roborock Qrevo Curv 2 Flow: ora lava con un rull...
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite Alpine A290 alla prova: un'auto bella che ti fa ...
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile Recensione HONOR Magic 8 Lite: lo smartphone ind...
Un PC biologico con 200.000 neuroni uman...
Parte oggi D-Anime, nuovo canale su Prim...
AMD presenta Ryzen AI 400 e PRO 400: pri...
Tutte le novità B2B di Lenovo in ...
NZXT H2 Flow, l'azienda rassicura: 'Non ...
Flesh & Wire: il nuovo FPS di Postal...
Il primo SUV EREV di Volkswagen è...
Doom: The Dark Ages, per ID Software il ...
ServiceNow presenta i colleghi IA: arriv...
Lenovo al MWC 2026: un handheld pieghevo...
L'incredibile richiamo per 20.000 e-bike...
Fino al 90% di FPS in più in ray ...
Roborock F25 ACE Pro: lava i pavimenti c...
Arrivano le prime offerte di primavera A...
HBO Max bloccherà la condivisione...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 12:49.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v