Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Nodo Nipote Xml

  1. #1

    Nodo Nipote Xml

    Ciao, ho un piccolo quesito da porre, sto realizzando una pagina che aggiorni un documento XML, il mio xml è questo:

    <padre>
    <figlio1>
    contenuto figlio 1
    </figlio1>

    <figlio2>
    <nipote1>contenuto nipote 1</nipote1>
    <nipote2>contenuto nipote 2</nipote2>

    </figlio2>
    </padre>

    Sto provando a creare il codice per inserire un nipote 3 sempre di seguito al nipote 2 tramite PHP utilizzando DOM con questo codice:

    <?php
    $doc = new DOMDocument();
    $doc->load('documento.xml');
    $root= $doc->documentElement;
    $figlio2 = $doc->createElement("figlio2");
    $doc->appendChild($figlio2);
    $nipote3 = $doc->createElement("nipote3");
    $figlio2->appendChild($nipote3);
    $root->appendChild($figlio2);

    $doc->save('documento.xml');
    ?>

    Con questo codice però il nipote3 si inserisce creando un nuovo figlio 2 mentre io vorrei SOLO inserire il nipote 3 nel

    punto indicato, qual'è il codice da inserire esatto?E' possibile avere un aiuto per favore?

    Grazie Ruggero

  2. #2
    Partendo da un file xml in
    questo modo
    Codice PHP:
    <?xml version="1.0" encoding="UTF-8"?>
    <padre>
    <figlio>
    </figlio>
    </padre>
    fai cosi
    Codice PHP:
    $doc = new DOMDocument();
    $doc->load('doc.xml');
    $child$doc->getElementsByTagName('figlio');
    $nipote1 $doc->createElement("nipote1","Sono il figlio 1");
    $nipote2 $doc->createElement("nipote2","Sono il figlio 2");
    $nipote3 $doc->createElement("nipote3","Sono il figlio 3");
    $child->item(0)->appendChild($nipote1);
    $child->item(0)->appendChild($nipote2);
    $child->item(0)->appendChild($nipote3);
    $doc->save('documento.xml'); 
    Ad ogni modo attribuire ad ogni nodo un numero
    è sbagliato dato che se padre ha metti 3 nodi
    figlio ha 3 figli etc etc ......


    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  3. #3
    Grazie mille!
    Comunque il file xml che ho scritto è solo un esempio, in realtà i marcatori li ho chiamati in maniera diversa..comunque il codice è efficente! GRAZIE ANCORA!

  4. #4
    Salve ,
    ho un quesito , gestisco una galleria che ha come archivio il seguente xml (documento.xml) :


    <padre>
    <figlio id="figlio">
    <nipote path="pippo">contenuto nodo</nipote>
    <nipote path="ciccio">contenuto nodo</nipote>
    <nipote path="pluto">contenuto nodo</nipote>
    <nipote path="micky">contenuto nodo</nipote>
    </figlio>
    </padre>

    e tramite PHP DOM aggiorno l'xml ogni volta che carico un'immagine( es. pippo ) sul server tramite PHP DOM:

    $doc = new DOMDocument();
    $doc->load('documento.xml');
    $child= $doc->getElementsByTagName('figlio');
    $image = $doc->createElement('nipote');
    $child->item(0)->appendChild($nipote);

    $image-> setAttribute('path', 'pippo');
    $image-> setIdAttribute('path', true);

    $doc->save('photos.xml');

    Se volessi cancellare invece solo il nodo nipote che contiene l'attributo "pluto" come posso fare?

    E' possibile avere un aiuto per favore?

    Grazie
    Ruggero

  5. #5
    removeChild


    oppure fai una query con XPath.


    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  6. #6
    Ciao Wisher,
    grazie per l'attenzione e x l'aiuto che mi hai dato la scorsa volta

    prima ho postato il codice sbagliato scusami... ti posto il codice :


    XML

    <padre>
    <figlio id="figlio">
    <nipote path="pippo">contenuto nodo</nipote>
    <nipote path="ciccio">contenuto nodo</nipote>
    <nipote path="pluto">contenuto nodo</nipote>
    <nipote path="micky">contenuto nodo</nipote>
    </figlio>
    </padre>

    e tramite PHP DOM sto provando a cancellare il nodo <nipote> che abbia l'attributo path="pluto":

    <?php

    $doc = new DOMDocument;
    $doc->load('documento.xml');

    $figlio = $doc->documentElement;

    // we retrieve the chapter and remove it from the book
    $nipote = $figlio->getElementsByTagName('figlio')->item(0);
    $oldchapter = $figlio->removeChild($nipote);

    echo $doc->saveXML();
    ?>

    Con questo codice non ottengo nessun risultato..dove sto sbagliando?
    Vorrei cancellare solo questo nodo tramite codice:

    <nipote path="pluto">contenuto nodo</nipote>

    Scusa se mi rivolgo sempre a te ma vedo che con il php e l'xml vai bene

    A presto
    Ruggero

  7. #7
    Originariamente inviato da whisher
    removeChild


    oppure fai una query con XPath.


    p.s. : le query le faccio con access o con sql al massimo ^_^ ma xpath non l'ho mai provato ..

  8. #8
    Codice PHP:
    $doc = new DOMDocument;
    $doc->load('documento.xml');
    $padre $doc->documentElement;
    $primoFiglio $padre->getElementsByTagName('figlio')->item(0);
    $nipoti $primoFiglio->getElementsByTagName('nipote');
    foreach(
    $nipoti as $nipote){
        if(
    $nipote->getAttribute('path')=='pluto'){
            
    $oldchapter $primoFiglio->removeChild($nipote);
        }
    }
    header('Content-Type: text/xml'); 
    echo 
    $doc->saveXML(); 
    il modo + diretto.

    XPath tanto per farti un'idea di cosa intendo con query.

    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  9. #9
    Grazie mille per l'aiuto, ora sto vedendo di imparare qualcosina con xpath, buon lavoro!

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.