Problema nell'estrarre un campo da file XML

di il
1 risposte

Problema nell'estrarre un campo da file XML

Ciao a tutti, primo messaggio e premetto che sto usicchiando PHP per delle piccole utility ma sono ancora molto indietro come conoscenza del linguaggio.

Ho bisogno di leggere un file XML traggiungibile attraverso un URL (https://geomag.bgs.ac.uk/web_service/GMModels/wmm/2020/?latitude=38.51565&longitude=15.94235&altitude=0&date=2022-01-01&format=xml), si tratta di calcolare la declinazione magnetica in base ad una data coordinata.

Questo è il contenuto del file:

<geomagnetic-field-model-result>
<model revision="2020">wmm</model>
<date>2022-01-01</date>
<coordinates>
<latitude units="deg (north)">38.51565</latitude>
<longitude units="deg (east)">15.94235</longitude>
<altitude units="km">0.00</altitude>
</coordinates>
<field-value>
<total-intensity units="nT">45799</total-intensity>
<declination units="deg (east)">3.963</declination>
<inclination units="deg (down)">54.602</inclination>
<north-intensity units="nT">26466</north-intensity>
<east-intensity units="nT">1833</east-intensity>
<vertical-intensity units="nT">37333</vertical-intensity>
<horizontal-intensity units="nT">26529</horizontal-intensity>
</field-value>
<secular-variation>
<total-intensity units="nT/y">57.2</total-intensity>
<declination units="arcmin/y (east)">7.1</declination>
<inclination units="arcmin/y (down)">1.7</inclination>
<north-intensity units="nT/y">10.9</north-intensity>
<east-intensity units="nT/y">56.0</east-intensity>
<vertical-intensity units="nT/y">59.6</vertical-intensity>
<horizontal-intensity units="nT/y">14.8</horizontal-intensity>
</secular-variation>
</geomagnetic-field-model-result>
Ho scritto il seguente codice:

<?php
$xml=simplexml_load_string(file_get_contents('https://geomag.bgs.ac.uk/web_service/GMModels/wmm/2020/?latitude=38.51565&longitude=15.94235&altitude=0&date=2022-01-01&format=xml')) or die("Error: Cannot create object");

print_r($xml);

echo '</p>date</p>';
echo $xml->date[0]; //valore letto correttamente
echo '</p>declination</p>';
echo $xml->field-value[0]->declination; //viene visualizzato 0 e non il valore effettivo
?>
Il valore date viene letto e stampato correttamente mentre declination risulta 0 e non 3.963, suppongo quindi che stia sbagliando qualcosa nel richiamare correttamente il valore, il risultato del print_r é:
SimpleXMLElement Object ( [model] => wmm [date] => 2022-01-01 [coordinates] => SimpleXMLElement Object ( [latitude] => 38.51565 [longitude] => 15.94235 [altitude] => 0.00 ) [field-value] => SimpleXMLElement Object ( [total-intensity] => 45799 [declination] => 3.963 [inclination] => 54.602 [north-intensity] => 26466 [east-intensity] => 1833 [vertical-intensity] => 37333 [horizontal-intensity] => 26529 ) [secular-variation] => SimpleXMLElement Object ( [total-intensity] => 57.2 [declination] => 7.1 [inclination] => 1.7 [north-intensity] => 10.9 [east-intensity] => 56.0 [vertical-intensity] => 59.6 [horizontal-intensity] => 14.8 ) )
Grazie in anticipo per l'aiuto.

1 Risposte

  • Re: Problema nell'estrarre un campo da file XML

    Alla fine ho capito che il problema era dovuto alla lineetta nel nome "field-value", non so se ci siano soluzioni più eleganti ma ho semplicemente creato una variabile $fieldvalue = 'field-value' ed usato la variabile all'interno dell'ultimo echo che quindi diventa
    
    echo $xml->$fieldvalue[0]->declination;
    
    Lascio questa nota nel caso potesse tornare utile a qualcuno.
Devi accedere o registrarti per scrivere nel forum
1 risposte