Newsgroup: it.comp.www.php
Titolo: right trim "br" da un DOM

Salve,
vorrei togliere l'ultimo o gli ultimi <br> da un DOM in modo tale che
non ci siano mai prima di un </body>. Esempio:
 
<body>
  Ciao,<br>
  come stai?<br>
  Bene, grazie.<br>
  <br>
</body>
 
==>
 
<body>
Ciao,<br>
come stai?<br>
Bene, grazie.
</body>
 
In pratica un right trim per i <br> sul DOM.
 
Forse dovrei fare qualche cosa di questo tipo:
 
  @$dom->loadHTML($strHtml);
  //trim last <br> in the DOM
  $brs = $dom->getElementsByTagName('br');
  $count = $brs->length;
  $lastbr = $brs[$count-1]:
e poi vedere se l'elemento successivo a $lastbr è </body> ma non so come
farlo.
 
Avete un aiuto da darmi?
 
-- 
Sandro kensan 
www.kensan.it
 & 
www.qiqi.it
 geek site
Saluto gli agenti della NSA - Hello NSA - 
www.nsa.gov
 

 Avete un aiuto da darmi?
 
O usi XPath per trovare solo i br figli diretti di body, oppure fai un 
getElementByTagName('body')[0]->childNodes, e controlli se l'ultimo è un 
br, quindi lo cancelli.
 
Bye.
 
 


posso fare un:
$bodynode = $dom->getElementByTagName('body')[0];
$childs = $bodynode->childNodes;
$count = $childs->length;
$lastchild = $childs[$count-1]:
 
foreach ($childs as $child) {
    // do something with this node
}
 
Adesso tento di implementarlo e ti faccio sapere.


 br, quindi lo cancelli.
 
è stato complicato ma ci sono esempi validi in Rete per cui sono
riuscito a comporre il mosaico pur conoscendo quasi nulla. Ecco il mio
script che funziona:
 
  //trim lasts <br> in the DOM
  $element = $dom->getElementsByTagName("body")->item(0);
  $childs = $element->childNodes;
  for ($i = $childs->length; --$i >= 0; ) {
    $el = $childs->item($i);
    if ($el->nodeName == "br") $el->parentNode->removeChild($el);
    else break;
  }
 
Sai dirmi quanto è compatibile cancellare i noti scorrendo a ritroso una
lista come la mia? Sarà sempre compatibile?


 lista come la mia? Sarà sempre compatibile?
 
Non te lo so dire con sicurezza, ma di solito cancellare dalla fine di una 
lista è una delle operazioni meno pericolose. :)
 
L'unica cosa a cui dovresti stare attento è che potrebbero non essere solo 
<br> alla fine, ma anche TextNode vuoti, o con solo spazi, tab o a-capo.
 
In pratica una cosa così:
 
  <br>
  Qualcosa.
  <br>
  <br>
</body>
 
sarà
 
TextNode<  >
Tag<br>
TextNode<\n  Qualcosa.\n  >
Tag<br>
TextNode<\n  >
Tag<br>
TextNode<\n>
TagEnd<body>
 
Bye.

 <br> alla fine, ma anche TextNode vuoti, o con solo spazi, tab o a-capo.
 
Per adesso il problema credo non si ponga in quanto uso un vecchio
programma di nome KompoZer per fare i miei semplicissimi testi html,
questo programma rielabora l'html e cose come quelle che dici tu non le
permette. Certo che uno spazio vuoto è possibile e dovrei modificare il
mio codice ma pure un <p></p> è possibile, lo spazio, però, lo vedo più
probabile nel mio caso.
 
Se usassi un editor di testo allora i casi come quelli mostrati nel tuo
esempio sono possibilissimi.


 programma di nome KompoZer
 
Ti conviene passare a BlueGriffon (
http://bluegriffon.org
)
KompoZer è fermo da molto tempo.
 
 

 KompoZer è fermo da molto tempo.
 
Grazie per il link, ho visto che sono andati avanti con lo sviluppo ma
dovrei compilarmi i sorgenti in quanto non c'è per la mia distro.


 
 
KompoZer era bellissimo, ma si è fermato all' html4 strict.
Il suo javascript è aggiornato alla stessa epoca ...
 
BlueGriffon è difficile da adoperare, almeno io l'ho trovato difficile.
Magari adesso è cambiato.
 
Bye
 
-- 
Alex
 
--- news://
freenews.netfront.net/
 - complaints: 
ne...@netfront.net
 ---

 Magari adesso è cambiato.
 
Quando ci sarà la versione per la mia distro lo proverò sicuramente.


 Magari adesso è cambiato.
 
BlueGriffon supporta HTML5, quindi è da preferire sempre e cmq a
KompoZer e agli altri che non supportano HTML5. Come facilità d'uso è
equiparabile agli altri software WYSIWYG, quindi non richiede
chissà quali conoscenze avanzate.
 
 
 

 che sono solo il core delle mie pagine web.
 
Ah sì, dei frammenti.
Poi magari li 'impacchetti' dentro una variabile php.
Simpatico il sistema e Kompozer va benissimoo per questo.


 Simpatico il sistema e Kompozer va benissimoo per questo.
 
Veramente? Le mie pagine html vengono in effetti caricate ed elaborate
dal php e alla fine c'è un echo $body che stampa il body della pagina
html all'interno di un layout (o come si chiama).


 Semplicemente non mi fidavo di mysql.
 
Come mai non ti "fidavi" di MySQL?
 
 


 
Ci sono dei vantaggi e degli svantaggi.
Il vantaggio è quello di avere un codice che 'si capisce'. Senza 
terribili miscugli di html e php con continue interruzioni
 
?>
   html, html
   html, html
<?php
 
e giri logici anche impensabili.
la lettura di quello che fa il codice è più agevole.
 
Lo svantaggio, penso, è quello di inviare una unica stringa al browser. 
Fino a quando non la riceve non fa nulla, mentre se invii la pagina un 
po' per volta inizia intanto ad eleborarla.


Il 21/03/2016, ciccio ha detto :

Già. Che ti ha fatto?


Il 21/03/2016, ciccio ha detto :

Già. Che ti ha fatto?
 


 po' per volta inizia intanto ad eleborarla.
 
No, non funziona così. La pagina viene composta tutta lato server in
pochi decimi di secondo e viene mandata al browser secondo i tempi di
caricamento standard.
 
In pratica è così:
 
|-----------------|
| Titolo          |
|-----------------|
|                 |
|                 |
|include(HTML)    |
|                 |
|-----------------|
|footer           |
-------------------
 
ovviamente i dati del titolo e del footer sono in mysql e l'include non
è un include ma è una lettura di un file e una elaborazione del DOM tra
cui l'elaborazione dei link ma comunque l'idea è quella raffigurata.


 Già. Che ti ha fatto?
 
mah, conoscevo poco di mysql, ho visto negli anni che anche fare porting
del data base da hosting provider all'altro è abbastanza semplice. A
volte occorre lasciare un server e andare in altri lidi.
 
Però è ovvio che mysql non è un luogo virtuale semplice e gli
inconvenienti sono dietro l'angolo. Il mio sito ha molti anni per cui
ogni problema è possibile tra cui la dismissione di mysql e/o il
trasferimento ad altri tipi di db.
 
Un file html rimane tale negli anni, non ci sono problemi come nel caso
dell'incapsulamento in un DB.
 
Adesso pare prendere piede maria DB che per fortuna è pienamente
compatibile con mysql.


 compatibile con mysql.
 
Certo ne è un fork, non poteva essere diversamente.