SitePoint Sponsor

User Tag List

Results 1 to 4 of 4
  1. #1
    SitePoint Enthusiast
    Join Date
    Nov 2010
    Posts
    13
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    extracting some fields from an xml file

    I'm trying to put some weather info on a web page, using data from the xml file below.

    Code:
    <?php
    $xmlstr = <<<XML
    <?xml version='1.0' standalone='yes'?>
    <data><request><type>Zipcode</type><query>80487</query></request><current_condition><observation_time>10:14 AM</observation_time><temp_C>-2</temp_C><temp_F>29</temp_F><weatherCode>122</weatherCode><weatherIconUrl>http://www.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0004_black_low_cloud.png</weatherIconUrl><weatherDesc>Overcast </weatherDesc><windspeedMiles>16</windspeedMiles><windspeedKmph>26</windspeedKmph><winddirDegree>240</winddirDegree><winddir16Point>WSW</winddir16Point><precipMM>4.3</precipMM><humidity>81</humidity><visibility>16</visibility><pressure>1001</pressure><cloudcover>100</cloudcover></current_condition>
    <weather><date>2012-01-22</date><tempMaxC>-4</tempMaxC><tempMaxF>24</tempMaxF><tempMinC>-15</tempMinC><tempMinF>5</tempMinF><windspeedMiles>21</windspeedMiles><windspeedKmph>35</windspeedKmph><winddirection>W</winddirection><winddir16Point>W</winddir16Point><winddirDegree>274</winddirDegree><weatherCode>323</weatherCode><weatherIconUrl>http://www.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0011_light_snow_showers.png</weatherIconUrl><weatherDesc>Patchy light snow</weatherDesc><precipMM>10.9</precipMM></weather>
    <weather><date>2012-01-23</date><tempMaxC>-1</tempMaxC><tempMaxF>30</tempMaxF><tempMinC>-15</tempMinC><tempMinF>5</tempMinF><windspeedMiles>8</windspeedMiles><windspeedKmph>12</windspeedKmph><winddirection>SW</winddirection><winddir16Point>SW</winddir16Point><winddirDegree>220</winddirDegree><weatherCode>116</weatherCode><weatherIconUrl>http://www.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0002_sunny_intervals.png</weatherIconUrl><weatherDesc>Partly Cloudy </weatherDesc><precipMM>0.8</precipMM></weather><weather><date>2012-01-24</date><tempMaxC>-1</tempMaxC><tempMaxF>30</tempMaxF><tempMinC>-14</tempMinC><tempMinF>6</tempMinF><windspeedMiles>9</windspeedMiles><windspeedKmph>14</windspeedKmph><winddirection>W</winddirection><winddir16Point>W</winddir16Point><winddirDegree>274</winddirDegree><weatherCode>119</weatherCode><weatherIconUrl>http://www.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0003_white_cloud.png</weatherIconUrl><weatherDesc>Cloudy </weatherDesc><precipMM>0.6</precipMM></weather><weather><date>2012-01-25</date><tempMaxC>1</tempMaxC><tempMaxF>34</tempMaxF><tempMinC>-15</tempMinC><tempMinF>6</tempMinF><windspeedMiles>6</windspeedMiles><windspeedKmph>9</windspeedKmph><winddirection>SSW</winddirection><winddir16Point>SSW</winddir16Point><winddirDegree>200</winddirDegree><weatherCode>113</weatherCode><weatherIconUrl>http://www.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0001_sunny.png</weatherIconUrl><weatherDesc>Sunny</weatherDesc><precipMM>0.1</precipMM></weather><weather><date>2012-01-26</date><tempMaxC>4</tempMaxC><tempMaxF>39</tempMaxF><tempMinC>-6</tempMinC><tempMinF>21</tempMinF><windspeedMiles>7</windspeedMiles><windspeedKmph>11</windspeedKmph><winddirection>SSW</winddirection><winddir16Point>SSW</winddir16Point><winddirDegree>200</winddirDegree><weatherCode>119</weatherCode><weatherIconUrl>http://www.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0003_white_cloud.png</weatherIconUrl><weatherDesc>Cloudy </weatherDesc><precipMM>0.7</precipMM></weather></data>
    XML;
    ?>
    I only want the temperature and weather description values. I've tried this code
    Code:
    <?php
    include 'weather.php';
    $xml= new SimpleXMLElement($xmlstr);
    foreach ($xml->children() as $weather){
    	$date = $weather['date'];
    	$maxC = $weather['tempMaxC'];
    	$minC = $weather['tempMinC'];
    	$maxF = $weather['tempMaxF'];
    	$minF = $weather['tempMinF'];
    	$desc = $weather['weatherDesc'];
    
    echo $date . $maxC . $minC . $maxF . $minF . $desc;
    }
    ?>
    but I just get a blank page. I really don't know what I'm doing so would be great if someone could help. Thanks!

  2. #2
    SitePoint Wizard silver trophybronze trophy Cups's Avatar
    Join Date
    Oct 2006
    Location
    France, deep rural.
    Posts
    6,869
    Mentioned
    17 Post(s)
    Tagged
    1 Thread(s)
    Try it without the include first, add complexity in stages. Start off with the text pasted into the script, as in your question.

    PHP Code:

    $xml = <<<XML
    <?xml version='1.0' standalone='yes'?>
    <data><request><type>Zipcode</type><query>80487

    .... and so on, as you posted...

    XML;

    $xml= new SimpleXMLElement($xmlstr);

    //Start here then comment/uncomment the dumps

    var_dump($xml);  // all nodes

    // var_dump($xml->weather);  // just the weather nodes

    // var_dump($xml->weather->tempMaxC);  // -4
    Access the nodes using the object notation (->)

  3. #3
    @php.net Salathe's Avatar
    Join Date
    Dec 2004
    Location
    Edinburgh
    Posts
    1,397
    Mentioned
    63 Post(s)
    Tagged
    0 Thread(s)
    Your XML is structured as follows:

    Code XML:
    <?xml version="1.0" standalone="yes"?>
    <data>
      <request>
        <type>Zipcode</type>
        <query>80487</query>
      </request>
      <current_condition>
        <observation_time>10:14 AM</observation_time>
        <temp_C>-2</temp_C>
        <temp_F>29</temp_F>
        <weatherCode>122</weatherCode>
        <weatherIconUrl>http://www.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0004_black_low_cloud.png</weatherIconUrl>
        <weatherDesc>Overcast </weatherDesc>
        <windspeedMiles>16</windspeedMiles>
        <windspeedKmph>26</windspeedKmph>
        <winddirDegree>240</winddirDegree>
        <winddir16Point>WSW</winddir16Point>
        <precipMM>4.3</precipMM>
        <humidity>81</humidity>
        <visibility>16</visibility>
        <pressure>1001</pressure>
        <cloudcover>100</cloudcover>
      </current_condition>
      <weather>
        <date>2012-01-22</date>
        <tempMaxC>-4</tempMaxC>
        <tempMaxF>24</tempMaxF>
        <tempMinC>-15</tempMinC>
        <tempMinF>5</tempMinF>
        <windspeedMiles>21</windspeedMiles>
        <windspeedKmph>35</windspeedKmph>
        <winddirection>W</winddirection>
        <winddir16Point>W</winddir16Point>
        <winddirDegree>274</winddirDegree>
        <weatherCode>323</weatherCode>
        <weatherIconUrl>http://www.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0011_light_snow_showers.png</weatherIconUrl>
        <weatherDesc>Patchy light snow</weatherDesc>
        <precipMM>10.9</precipMM>
      </weather>
      <weather>
        <date>2012-01-23</date>
        <tempMaxC>-1</tempMaxC>
        <tempMaxF>30</tempMaxF>
        <tempMinC>-15</tempMinC>
        <tempMinF>5</tempMinF>
        <windspeedMiles>8</windspeedMiles>
        <windspeedKmph>12</windspeedKmph>
        <winddirection>SW</winddirection>
        <winddir16Point>SW</winddir16Point>
        <winddirDegree>220</winddirDegree>
        <weatherCode>116</weatherCode>
        <weatherIconUrl>http://www.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0002_sunny_intervals.png</weatherIconUrl>
        <weatherDesc>Partly Cloudy </weatherDesc>
        <precipMM>0.8</precipMM>
      </weather>
      <weather>
        <date>2012-01-24</date>
        <tempMaxC>-1</tempMaxC>
        <tempMaxF>30</tempMaxF>
        <tempMinC>-14</tempMinC>
        <tempMinF>6</tempMinF>
        <windspeedMiles>9</windspeedMiles>
        <windspeedKmph>14</windspeedKmph>
        <winddirection>W</winddirection>
        <winddir16Point>W</winddir16Point>
        <winddirDegree>274</winddirDegree>
        <weatherCode>119</weatherCode>
        <weatherIconUrl>http://www.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0003_white_cloud.png</weatherIconUrl>
        <weatherDesc>Cloudy </weatherDesc>
        <precipMM>0.6</precipMM>
      </weather>
      <weather>
        <date>2012-01-25</date>
        <tempMaxC>1</tempMaxC>
        <tempMaxF>34</tempMaxF>
        <tempMinC>-15</tempMinC>
        <tempMinF>6</tempMinF>
        <windspeedMiles>6</windspeedMiles>
        <windspeedKmph>9</windspeedKmph>
        <winddirection>SSW</winddirection>
        <winddir16Point>SSW</winddir16Point>
        <winddirDegree>200</winddirDegree>
        <weatherCode>113</weatherCode>
        <weatherIconUrl>http://www.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0001_sunny.png</weatherIconUrl>
        <weatherDesc>Sunny</weatherDesc>
        <precipMM>0.1</precipMM>
      </weather>
      <weather>
        <date>2012-01-26</date>
        <tempMaxC>4</tempMaxC>
        <tempMaxF>39</tempMaxF>
        <tempMinC>-6</tempMinC>
        <tempMinF>21</tempMinF>
        <windspeedMiles>7</windspeedMiles>
        <windspeedKmph>11</windspeedKmph>
        <winddirection>SSW</winddirection>
        <winddir16Point>SSW</winddir16Point>
        <winddirDegree>200</winddirDegree>
        <weatherCode>119</weatherCode>
        <weatherIconUrl>http://www.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0003_white_cloud.png</weatherIconUrl>
        <weatherDesc>Cloudy </weatherDesc>
        <precipMM>0.7</precipMM>
      </weather>
    </data>

    If you want to get information from each of the <weather> elements, using SimpleXML, you could do something like the following.

    PHP Code:
    $data = new SimpleXMLElement($xmlstr);

    foreach (
    $data->weather as $weather) {
        
    $date = (string) $weather->date;
        
    $maxC = (int) $weather->tempMaxC;
        
    $minC = (int) $weather->tempMinC;
        
    $maxF = (int) $weather->tempMaxF;
        
    $minF = (int) $weather->tempMinF;
        
    $desc = (string) $weather->weatherDesc;
        
    // Do something useful with these values


    See also, Basic SimpleXML usage and examples in the PHP manual.
    Salathe
    Software Developer and PHP Manual Author.

  4. #4
    SitePoint Enthusiast
    Join Date
    Nov 2010
    Posts
    13
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Thanks, that worked a treat!


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •