Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [DOM php5] shiftare nodi xml [PROBLEMA cloneNode]

    Ciao io sto cercando di creare uno shiftamento per i nodi di un file XML.

    Finmchè si tratta di un nodo semplice quindi senza figli tutto va benissimo.

    Il problema è che ora dovrei farlo con nodi che contengono dei figli.

    esempio di un nodo:

    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <archivio>
    
      <storia>
    
        <titolo><![CDATA[prova2]]></titolo>
    
        <cartella><![CDATA[prova2]]></cartella>
    
        <front>Untitled-1.jpg</front>
    
        <galleria/>
    
      </storia>
    
      <storia>
    
        <titolo><![CDATA[prova]]></titolo>
    
        <cartella><![CDATA[prova]]></cartella>
    
        <front>41421_1505144136_1766_n.jpg</front>
    
        <galleria>
    
          <img>41421_1505144136_1766_n.jpg</img>
          <img>Untitled-1.jpg</img>
    
        </galleria>
    
      </storia>
    
    </archivio>
    Uso dom PHP5 e con il metodo cloneNode(true) mi vengono clonati solo i valori dei nodi figli e non anche i nodi stessi.

    forse più chiaro se vi posto il codice che uso

    Codice PHP:

    $imgshift
    =$root->getElementsByTagName("storia")->item($iditem);
                            
    if(
    $shifttype==1)    
    $imgoldshift=$root->getElementsByTagName("storia")->item($iditem+1);

    if(
    $shifttype==0)
    $imgoldshift=$root->getElementsByTagName("storia")->item($iditem-1);
                
                
                
    $temp=$imgoldshift->cloneNode(true);     
                
    $imgoldshift->nodeValue=$imgshift->nodeValue;
                
    $imgshift->nodeValue=$temp->nodeValue
    Qui praticamente il nuovo nodo sarà così:

    <storia>prova prova 41421_1505144136_1766_n.jpg.......</storia>

    invece che ricreare la struttura con i nodi giusti.

    Spero di esser stato abbastanza chiaro, grazie. Ogni soluzione alternativa è ben accetta, ripeto il mio scopo è quello di spostare un nodo <storia> con i suoi figli una posizione prima o dopo all'interno del file.

  2. #2
    Utente di HTML.it L'avatar di Takeno
    Registrato dal
    May 2007
    Messaggi
    146
    Ora non ricordo la sintassi, dovrei rivedermela, ma secondo me il problema è il dare "nodeValue" perché prende il "valore".

    E' un XML da te generato? Perché potresti risolvere aggiungendo un attributo order, es:

    <storia order="1">

    in modo tale da poter dare un criterio d'ordinamento (se questo è il caso).

  3. #3
    grzie mille, è un'ottima soluzione e soprattutto molto più comoda ma il mio problema aumenta perchè essendo già un lavoro terminato, questa modifica dovrei riuscire a doverla fare senza modificare la struttura dei nodi ( ho creato un dannato cms quindi poi dovrei rivedere tutti i files)

  4. #4
    Utente di HTML.it L'avatar di Takeno
    Registrato dal
    May 2007
    Messaggi
    146
    Ok, nel frattempo ho fatto delle prove.

    Codice PHP:
    $imgshift $root->getElementsByTagName("storia");
    if(
    $shifttype==1
        
    $root->getElementsByTagName("archivio")->item(0)->insertBefore($imgshift->item($iditem), $imgshift->item($iditem-1));
    elseif(
    $shifttype==0
        
    $root->getElementsByTagName("archivio")->item(0)->insertBefore($imgshift->item($iditem+1), $imgshift->item($iditem)); 
    Spero d'aver azzeccato l'ordine. Lo shift avviene alla perfezione, devi controllare solo se è giusto il shifttype correlato.

  5. #5
    Grazie mille, l'insertBefore va benissimo non ci avevo minimamente pensato Grandissimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.