Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto
Amazon porta i colori sul suo Kindle da scrittura più grande: schermo Colorsoft a 11 pollici, processore quad-core, penna premium più reattiva e strumenti IA per le note, sono le note salienti. Il salto di prezzo rispetto al modello in bianco e nero si fa sentire, anche se la percezione è quella di trovarsi di fronte a un prodotto di fascia altissima, per veri appassionati
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
Abbiamo intervistato Sumit Dhawan, CEO di Proofpoint, per capire come stia cambiando il mondo della sicurezza con l'avvento dell'intelligenza artificiale e con il ritmo sempre più serrato a cui vengono trovate vulnerabilità nel software. Un problema significativo, che richiederà del tempo per essere risolto (o quantomeno arginato)
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
La parola d'ordine al Nextcloud Summit 2026, che si è tenuto a Monaco, è stata "sovranità". Non come è spesso usato questo termine in politica ma, al contrario, come capacità positiva di decidere il proprio destino tecnologico, con modalità collaborative e aperte. L'Europa dice già molto nel mondo open source, che viene visto come mezzo per ottenere la tanto agognata autonomia digitale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-03-2006, 17: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, 08: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, 09: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, 10: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, 10: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, 14: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, 14: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, 16: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, 16: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, 17: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, 07: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, 08: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


Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto Kindle Scribe Colorsoft: riduce le cornici e div...
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint L'IA cambia tutte le regole della sicurezza tra ...
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati TCL 65C8L, la recensione del SQD-Mini LED da 440...
Una ventola nascosta e un design fuori d...
Display e fotocamera insieme: a Zurigo n...
Lenovo Idea Tab Plus, il tablet per stud...
Un ingegnere di AMD ha riprodotto in cas...
SanDisk Optimus cresce con nuovi SSD cer...
Loongson contro Intel e AMD: dalla Cina ...
Australia, quasi tutti gli under-16 aggi...
Oltre 1.300 miliardi di dollari per la p...
Un nuovo studio mette in dubbio la natur...
Crisi Volkswagen, torna l'ipotesi cessio...
Il CERN spegne il Large Hadron Collider:...
Stranger Than Heaven avrà una storia mol...
Il futuro prezzo di PS6 preoccupa i gioc...
AMD Ryzen 10000 sempre più vicini...
OpenAI strappa ad Apple il capo dell'har...
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: 16:31.


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