Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,448

    [PHP-XML] Trovare il giusto nodo e prendere il valore

    Ho un file xml fatto così
    codice:
    <?xml version="1.0" encoding="utf-8"?>
    <form>
        <fieldset>
    
            <field name="id" type="text" default="0" readonly="true" class="readonly"/> 
    			   
            <field name="group" type="list" class="inputbox" required="true" size="1" default="1">
                    <option value="1">Calcola il tuo preventivo</option>
                    <option value="2">Copertina</option>
                    <option value="3">Interno</option>
                    <option value="4">Allestimento</option>
                    <option value="5">Servizi</option>
                    <option value="6">Consegna</option>
            </field>
    		
            <field name="type" type="list" class="inputbox" required="true" size="1" default="1">
                    <option value="text">Text</option>
                    <option value="select">Select</option>
                    <option value="radio">Radio</option>
            </field>
        </fieldset>
    </form>
    Dato un valore intero devo vedere se nel nodo "field" esiste un nodo <option> con "value" pari al valore intero dato, in caso positivo devo poterne modificare sia il value che la stringa che appare tra i tag <option></opttion>.

    Uso simplexml e so già selezionare il nodo <field> che mi interessa, ma non so fare il resto.

    Come si fa?

  2. #2
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Codice PHP:
    <?php
    $intero 
    3;
    $d = new DOMDocument();
    $d->loadXML($s);//$s = stringa con il tuo xml, oppure fai $d->load('nomefile.xml');
    $x = new DOMXPath($d);

    $r $x->query("//option[@value=$intero]");
    if(
    $r !== false && $r->length === 1){
      
    $r->item(0)->setAttribute('value','Ciao');
      
    $r->item(0)->nodeValue 'Mondo';
    }

    echo 
    $d->saveXML();

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,448
    Grazie

  4. #4
    Originariamente inviato da bubi1
    Codice PHP:
    <?php
    $intero 
    3;
    $d = new DOMDocument();
    $d->loadXML($s);//$s = stringa con il tuo xml, oppure fai $d->load('nomefile.xml');
    $x = new DOMXPath($d);

    $r $x->query("//option[@value=$intero]");
    if(
    $r !== false && $r->length === 1){
      
    $r->item(0)->setAttribute('value','Ciao');
      
    $r->item(0)->nodeValue 'Mondo';
    }

    echo 
    $d->saveXML();
    Cmq come attribute dovevi mettere "Hello" e come nodeValue "World"
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,448
    Per quale motivo su questo xml non funziona?
    Cosa c'è di diverso?

    Si può selezionare il tag <field> con attributo name='group', cercare solo tra gli <option> in esso contenuti quello col "value" voluto e poi modificarlo?

    codice:
    <?xml version="1.0" encoding="utf-8"?>
    <form>
    	<fieldset>
    
    		<field 	name="id" type="text" default="0" label="..." description="..." 
    				readonly="true" class="readonly"/> 
    
    		<field 	name="position" type="text" size="40" class="inputbox" 
    				label="..." description="..." 
    				required="true" 
    				filter="safehtml"/> 
    
    		<field 	name="group" type="list" class="inputbox" 
    				label="..." description="..." 
    				required="true" size="1" default="1">
    				<option value="1">Calcola il tuo preventivo</option>
    				<option value="2">Copertina</option>
    				<option value="3">Interno</option>
    				<option value="4">Allestimento</option>
    				<option value="5">Servizi</option>
    				<option value="6">Consegna</option>
    		
    		</field> 
    
    		<field 	name="type" type="list" class="inputbox" 
    				label="..." description="..." 
    				required="true" size="1" default="1">
    				<option value="text">Text</option>
    				<option value="select">Select</option>
    				<option value="radio">Radio</option>
    		</field> 
    
    		<field 	name="name" type="text" size="40" class="inputbox" 
    				label="..." description="..." 
    				required="true" 
    				filter="safehtml"/> 
    
    		<field 	name="label" type="text" size="40" class="inputbox" 
    				label="..." description="..." 
    				required="true" 
    				filter="safehtml"/> 
    
    		<field 	name="size" type="text" size="40" class="inputbox" 
    				label="..." description="..." 
    				required="true" 
    				filter="safehtml"/> 
    
    		<field 	name="state" type="list" 
    				label="..." description="..." 
    				class="inputbox" size="1" default="1">
    				<option value="1">JPUBLISHED</option>
    				<option value="0">JUNPUBLISHED</option>
    		</field> 
    
    		<field name="checked_out" type="hidden" filter="unset"/>
    		<field name="checked_out_time" type="hidden" filter="unset"/>
    
    	</fieldset>
    </form>

  6. #6
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Originariamente inviato da Alhazred
    Per quale motivo su questo xml non funziona?
    Cosa c'è di diverso?
    veramente a me funziona
    Si può selezionare il tag <field> con attributo name='group', cercare solo tra gli <option> in esso contenuti quello col "value" voluto e poi modificarlo?
    si, basta cambiare la query in
    //field[@name='group']/option[@value=$intero]

    edit: ma forse non ho capito: tu vuoi modificare l'<option> o il <field> ?

  7. #7
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Originariamente inviato da Santino83_02
    Cmq come attribute dovevi mettere "Hello" e come nodeValue "World"
    vero

  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,448
    Originariamente inviato da bubi1
    veramente a me funziona

    si, basta cambiare la query in
    //field[@name='group']/option[@value=$intero]

    edit: ma forse non ho capito: tu vuoi modificare l'<option> o il <field> ?
    Devo modificare l'<option>

  9. #9
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Originariamente inviato da Alhazred
    Devo modificare l'<option>
    beh, dovrebbe andare, ti posto il codice completo che ho appena provato

    Codice PHP:
    <?php
    $s 
    '<?xml version="1.0" encoding="utf-8"?>
    <form>
            <fieldset>

                    <field  name="id" type="text" default="0" label="..." description="..." 
                                    readonly="true" class="readonly"/> 

                    <field  name="position" type="text" size="40" class="inputbox" 
                                    label="..." description="..." 
                                    required="true" 
                                    filter="safehtml"/> 

                    <field  name="group" type="list" class="inputbox" 
                                    label="..." description="..." 
                                    required="true" size="1" default="1">
                                    <option value="1">Calcola il tuo preventivo</option>
                                    <option value="2">Copertina</option>
                                    <option value="3">Interno</option>
                                    <option value="4">Allestimento</option>
                                    <option value="5">Servizi</option>
                                    <option value="6">Consegna</option>

                    </field> 

                    <field  name="type" type="list" class="inputbox" 
                                    label="..." description="..." 
                                    required="true" size="1" default="1">
                                    <option value="text">Text</option>
                                    <option value="select">Select</option>
                                    <option value="radio">Radio</option>
                    </field> 

                    <field  name="name" type="text" size="40" class="inputbox" 
                                    label="..." description="..." 
                                    required="true" 
                                    filter="safehtml"/> 

                    <field  name="label" type="text" size="40" class="inputbox" 
                                    label="..." description="..." 
                                    required="true" 
                                    filter="safehtml"/> 

                    <field  name="size" type="text" size="40" class="inputbox" 
                                    label="..." description="..." 
                                    required="true" 
                                    filter="safehtml"/> 

                    <field  name="state" type="list" 
                                    label="..." description="..." 
                                    class="inputbox" size="1" default="1">
                                    <option value="1">JPUBLISHED</option>
                                    <option value="0">JUNPUBLISHED</option>
                    </field> 

                    <field name="checked_out" type="hidden" filter="unset"/>
                    <field name="checked_out_time" type="hidden" filter="unset"/>

            </fieldset>
    </form>'
    ;
    $intero 3;
    $d = new DOMDocument();
    $d->loadXML($s);
    $x = new DOMXPath($d);

    $r $x->query("//field[@name='group']/option[@value=$intero]");
    if(
    $r !== false && $r->length === 1){
      
    $r->item(0)->setAttribute('value','Ciao');
      
    $r->item(0)->nodeValue 'Mondo';
    }

    echo 
    $d->saveXML();
    risultato:
    codice:
    php x.php 
    <?xml version="1.0" encoding="utf-8"?>
    <form>
            <fieldset>
    
                    <field name="id" type="text" default="0" label="..." description="..." readonly="true" class="readonly"/> 
    
                    <field name="position" type="text" size="40" class="inputbox" label="..." description="..." required="true" filter="safehtml"/> 
    
                    <field name="group" type="list" class="inputbox" label="..." description="..." required="true" size="1" default="1">
                                    <option value="1">Calcola il tuo preventivo</option>
                                    <option value="2">Copertina</option>
                                    <option value="Ciao">Mondo</option>
      ...tagliato...

  10. #10
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,448
    Funziona, grazie

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 © 2024 vBulletin Solutions, Inc. All rights reserved.