Come ciclare un xml in base all'id dell'elemento

fradamma

Utente Attivo
28 Set 2012
93
0
0
Ciao a tutti.
Vi espongo subito il mio problema. Ho un xml come quello postato qui sotto. Ogni "element" all'interno della root "elements" è provvisto di un id numerico (lo stesso corrisponde al numero che segue la "p_" dell "url"). Questo xml mi servirà perchè nella mia pagina web staticizzata (la quale corrisponderà ad una qualsiasi pagina con path "/prova/pages/pag_xxxx.jsp" e che non so a priori che posizione occuperà nell'xml) ho due div. Al click sul div "arrow-left" o "arrow-right" devo fare un .replace() dell'url utilizzando l'id dell'elements.
Mi spiego meglio: ora, per esempio sono su www.miosito.it/prova/pages/pag_4573.jsp (ripeto: è un esempio potrei essere su qualsiasi pagina e non lo so a priori), se clicco su arrow-left devo andare alla pagina precedente che, guardando l'xml sotto, corrisponde a www.miosito.it/prova/pages/pag_4897.jsp, se clicco su arrow-right devo andare al successivo, in tal caso www.miosito.it/prova/pages/pag_8946.jsp
Non riesco a capire come venirne a capo. Il tutto credo che vada dentro una chiamata ajax, e per il replace avevo pensato ad una cosa tipo "location.href = location.pathname.replace( .... )".

Il problema è che non so come cicliare l'xml e spostarmi facendo un replace in base all'ID dell'elemento....tenete presente che la mia pagina potrà essere random a qualsiasi livello dell'xml e per questo non posso utilizzare un indice di array.

Spero possiate aiutarmi, grazie e buonanotte

Codice:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<elements>
    <element id="15909">
        <url>/prova/pages/pag_15909.jsp</url>
    </element>
    <element id="3498">
        <url>/prova/pages/pag_3498.jsp</url>
    </element>
    <element id="4897">
        <url>/prova/pages/pag_4897.jsp</url>
    </element>
    <element id="4573">
        <url>/prova/pages/pag_4573.jsp</url>
    </element>
    <element id="8946">
        <url>/prova/pages/pag_8946.jsp</url>
    </element>
</elements>

Codice:
		<div class="arrow-left" id=""></div>
		<div class="arrow-right" id="9192"></div>
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Questo dovrebbe andare bene
Codice:
<script>
    var curpage = location.pathname.replace(/[^0-9]/g,'');

    $.get('test.xml').done(function(resp){
        var xml = $(resp);
        var curid = xml.find('element[id='+curpage+']').index();
        var el = xml.find('element');

        curid>0?$('.arrow-left').attr('id',getNumLink(el.eq(curid-1))):$('.arrow-left').remove();
        curid<el.length-1?$('.arrow-right').attr('id',getNumLink(el.eq(curid+1))):$('.arrow-right').remove();
    });

    function getNumLink(e)
    {
        return e.find('url').text().replace(/[^0-9]/g,'');
    }
</script>

<div class="arrow-left" id=""></div>
<div class="arrow-right" id=""></div>

ps: ovviamente includi jquery
 

fradamma

Utente Attivo
28 Set 2012
93
0
0
Questo dovrebbe andare bene
Codice:
<script>
    var curpage = location.pathname.replace(/[^0-9]/g,'');

    $.get('test.xml').done(function(resp){
        var xml = $(resp);
        var curid = xml.find('element[id='+curpage+']').index();
        var el = xml.find('element');

        curid > 0 ? $('.arrow-left').attr('id',getNumLink(el.eq(curid-1))):$('.arrow-left').remove();
        curid < el.length-1 ? $('.arrow-right').attr('id',getNumLink(el.eq(curid+1))):$('.arrow-right').remove();
    });

    function getNumLink(e)
    {
        return e.find('url').text().replace(/[^0-9]/g,'');
    }
</script>

<div class="arrow-left" id=""></div>
<div class="arrow-right" id=""></div>

ps: ovviamente includi jquery


Grazie tante! Diciamo che in linea di massima ho capito cosa intendi fare con lo script:

Qui fai un replace del path della pagina dove mi trovo sostituendo ogni carattere NON numerico con una stringa vuota, in modo tale da avere solo un numero corrispondente all'ID e lo metti nella variabile "curpage" (PS in rete ho visto che molti utilizzano " .replace(/[^0-9]+/g, ''); " è la stessa cosa con il "+" ??? )

Codice:
var curpage = location.pathname.replace(/[^0-9]/g,'');

Poi dentro la chiamata ajax vai a trovare l'index (ossia la posizione all'interno dell'xml) dell' "element" che ha come ID il "curpage" (ossia quello che corrisponde alla pagina dove mi trovo)

Codice:
var curid = xml.find('element[id='+curpage+']').index();

Sono un po poco avvezzo all'utilizzo degli operatori ternari... cosa fanno queste due righe di codice?

Codice:
        curid > 0 ? $('.arrow-left').attr('id',getNumLink(el.eq(curid-1))) : $('.arrow-left').remove();
        curid < el.length-1 ? $('.arrow-right').attr('id',getNumLink(el.eq(curid+1))) : $('.arrow-right').remove();

la funzione poi quando la lancio? Al document ready?

Codice:
  function getNumLink(e)
    {
        return e.find('url').text().replace(/[^0-9]/g,'');
    }

Grazie tante ancora!
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Grazie tante! Diciamo che in linea di massima ho capito cosa intendi fare con lo script:

Qui fai un replace del path della pagina dove mi trovo sostituendo ogni carattere NON numerico con una stringa vuota, in modo tale da avere solo un numero corrispondente all'ID e lo metti nella variabile "curpage" (PS in rete ho visto che molti utilizzano " .replace(/[^0-9]+/g, ''); " è la stessa cosa con il "+" ??? )

Codice:
var curpage = location.pathname.replace(/[^0-9]/g,'');

Poi dentro la chiamata ajax vai a trovare l'index (ossia la posizione all'interno dell'xml) dell' "element" che ha come ID il "curpage" (ossia quello che corrisponde alla pagina dove mi trovo)

Codice:
var curid = xml.find('element[id='+curpage+']').index();

Sono un po poco avvezzo all'utilizzo degli operatori ternari... cosa fanno queste due righe di codice?

Codice:
        curid > 0 ? $('.arrow-left').attr('id',getNumLink(el.eq(curid-1))) : $('.arrow-left').remove();
        curid < el.length-1 ? $('.arrow-right').attr('id',getNumLink(el.eq(curid+1))) : $('.arrow-right').remove();

la funzione poi quando la lancio? Al document ready?

Codice:
  function getNumLink(e)
    {
        return e.find('url').text().replace(/[^0-9]/g,'');
    }

Grazie tante ancora!
1)Si
2)Si
3)Sono un fan dell'inline code, in pratica è come un if else in una sola linea
4)Quella funzione non la devi usare, devi copiare e incollare quel codice nello script della pagina dopo jquery
 

fradamma

Utente Attivo
28 Set 2012
93
0
0
ahh...un altra paio di domande, se posso...
Perchè praticamente nell' "else", hai scritto ": $('.arrow-left').remove();" ? ....va a rimuovere l'elemento ed io non voglio che questo accada..
Inoltre, voglio che l'evento si verifichi proprio al click su .arrow-left (vai alla pagina precedente) o .arrow-right (vai alla pagina successiva)...secondo te poi posso mettere tutto dentro una cosa del genere? Infine, come faccio a fare il redirect? Non cè niente che mi riscriva l'url...

Codice:
$(".arrow-left, .arrow-right").click( function() {
      //qui il codice fatto da te?
});
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Codice:
<script>
    var curpage = location.pathname.replace(/[^0-9]/g,'');

    $.get('test.xml').done(function(resp){
        var xml = $(resp);
        var curid = xml.find('element[id='+curpage+']').index();
        var el = xml.find('element');
        var getNumLink = function(e){ return e.find('url').text().replace(/[^0-9]/g,''); }

        if(curid>0)
            $('.arrow-left').attr('id',getNumLink(el.eq(curid-1)));
        if(curid<el.length-1)
            $('.arrow-right').attr('id',getNumLink(el.eq(curid+1)));
    });

    $(document).ready(function(){
        $(".arrow-left, .arrow-right").click(function() {
          if($(this).attr('id').length>0)
            location.href = "/prova/pages/pag_"+$(this).attr('id')+".jsp";
        });
    });
</script>
<div class="arrow-left" id="">INDIETRO</div>
<div class="arrow-right" id="">AVANTI</div>
Così fa il redirect in base all'id, se l'id è l'ultimo o il primo rispettivamente indietro o avanti non faranno niente
 

fradamma

Utente Attivo
28 Set 2012
93
0
0
Scusami se ti do ancora fastidio. Però potresti spiegarmi cosa accade con queste due righe di codice (in base alle variabili dichiarate prima) ? Perchè credo che siano il fulcro di tutto lo script. Perchè "if (curid > 0)" e dopo...."if(curid<el.length-1)" ?

Codice:
         if(curid>0)
            $('.arrow-left').attr('id',getNumLink(el.eq(curid-1)));
         if(curid<el.length-1)
            $('.arrow-right').attr('id',getNumLink(el.eq(curid+1)))

Grazie ancora!
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Scusami se ti do ancora fastidio. Però potresti spiegarmi cosa accade con queste due righe di codice (in base alle variabili dichiarate prima) ? Perchè credo che siano il fulcro di tutto lo script. Perchè "if (curid > 0)" e dopo...."if(curid<el.length-1)" ?

Codice:
         if(curid>0)
            $('.arrow-left').attr('id',getNumLink(el.eq(curid-1)));
         if(curid<el.length-1)
            $('.arrow-right').attr('id',getNumLink(el.eq(curid+1)))

Grazie ancora!
Se non è la prima pagina aggiunge l'id ad arrow-left della pagina precedente, e se non è l'ultima pagina aggiunge l'id della pagina successiva ad arrow-right, tutto qui
 
Discussioni simili
Autore Titolo Forum Risposte Data
B ciclare file xml con PHP PHP 1
S Problema nel ciclare un json Javascript 0
P Ciclare tra array di oggetti PHP 1
motleyrulez Ciclare sottoarray teoricamente infiniti PHP 3
G [ASP] Ciclare i valori di 2 array Classic ASP 2
T [PHP] Ciclare array multidimensionali PHP 2
A [PHP] Ciclare array multidimensionale e inserire valori in DB PHP 2
simgia [PHP] Ciclare una query JOIN PHP 2
N Ciclare sul DB e mantenere i dati PHP 3
M Ciclare piu query PHP 0
M Ciclare piu query MySQL 0
Monital Ciclare delle select box associate alle input box PHP 1
D Miglior modo per estrarre le occorrenze di un elemento in un set di più file xml e quindi scrivere il risultato in una tabella Excel o magari in JSON XML 0
B Da XML a TXT x4 XML 0
P Rimozione automatica url da sitemap.xml con PHP PHP 1
P Modifica con PHP di un node in una sitemap xml PHP 0
M modificare un file .XML da database Sql PHP 13
T Da xsd a xml ed inserimento dati in excel XML 0
C Problema con dati meteo xml XML 1
R Cerco esperto XML Offerte e Richieste di Lavoro e/o Collaborazione 0
E [PHP] creare temporary table per dati da xml PHP 2
G XML raccolta brani XML 1
P [CERCO] Webmaster per cataloghi prodotti csv/xml Offerte e Richieste di Lavoro e/o Collaborazione 3
S aggiornare valore di un elemento xml con php PHP 8
G Errore Cannot read property 'childNodes' of undefined per mancanza nodo nel file xml XML 6
A [PHP] Prelievo dati da xml online. PHP 9
L XML zip XML 3
Simone P Fatturazione elettronica xml e invio SDI Discussioni Varie 53
L [PHP] parsing xml PHP 1
J XML e css XML 0
P Importazione dati da file xml in db mysql con php PHP 17
F Parsing in PHP non legge tutto il file XML XML 2
A SERP ballerine e interventi manuali sitemap.xml SEO e Posizionamento 2
S Problema in PHP per invio file XML - RISOLTO- PHP 8
M [Javascript] Visualizza contenuto file XML aggiornato con text scroll Javascript 0
D [PHP] problema con xml PHP 13
cristoforo58 Stampare dei valori XML in PHP PHP 0
daniele430 [C++] Problema accenti - mysql - XML C/C++ 0
T Visualizzare un Xml su un sito in modo semplice XML 1
M problema lettere accentate da file xml a php PHP 6
fabryx [PHP]RISOLTO: Parsing xml nodi con caratteri speciali PHP 1
L [php e xml] per creare una galleria fotografica con diversi file xml PHP 0
L [PHP] ordinare xml PHP 0
S [HTML] Visualizzare XML formattato in HTML HTML e CSS 9
utente testo scorrevole html da file txt o xml HTML e CSS 6
P Gestire accesso ad un file xml pubblico PHP 1
A Come mettere il target _blank in un parser xml in php? PHP 1
F come creare un search box coi file .xml dei merchant? XML 0
felino [VBScript] XML Prendere il Value di un childnode attravervo il nome del nodo Visual Basic 0
M Href in xml verso ancora posta dentro un iframe XML 0

Discussioni simili