PluginProbe
wp-forecast / 3..5
wp-forecast v3..5
10.0 trunk 1.4 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3..5 3..8 3.0 3.1 3.2 3.3 3.4 3.6 All 86 releases
wp-forecast / func_xml_parse.php

func_xml_parse.php in wp-forecast 3..5, at func_xml_parse.php

176 lines 5.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 if (!function_exists('wpf_xml_parser')) {
4 global $wpf_weather,$wpf_pstack,$wpf_go_ahead,$wpf_fc_daynumber,$wpf_debug;
5
6
7 // start_element() - called for every start tag
8 function start_element( $parser, $name, $attribute )
9 {
10 global $wpf_pstack,$wpf_go_ahead,$wpf_fc_daynumber;
11 global $wpf_weather,$wpf_debug;
12
13 if ($wpf_debug > 1)
14 pdebug("Start of start_element ()");
15
16 $wpf_path_table =
17 array(
18 "/ADC_DATABASE/UNITS/TEMP" => "un_temp",
19 "/ADC_DATABASE/UNITS/DIST" => "un_dist",
20 "/ADC_DATABASE/UNITS/SPEED" => "un_speed",
21 "/ADC_DATABASE/UNITS/PRES" => "un_pres",
22 "/ADC_DATABASE/UNITS/PREC" => "un_prec",
23 "/ADC_DATABASE/LOCAL/CITY" => "city",
24 "/ADC_DATABASE/LOCAL/STATE" => "state",
25 "/ADC_DATABASE/LOCAL/TIME" => "time",
26 "/ADC_DATABASE/LOCAL/LAT" => "lat",
27 "/ADC_DATABASE/LOCAL/LON" => "lon",
28 "/ADC_DATABASE/LOCAL/GMTDIFF" => "gmtdiff",
29 "/ADC_DATABASE/CURRENTCONDITIONS/PRESSURE" => "pressure",
30 "/ADC_DATABASE/CURRENTCONDITIONS/TEMPERATURE" => "temperature",
31 "/ADC_DATABASE/CURRENTCONDITIONS/REALFEEL" => "realfeel",
32 "/ADC_DATABASE/CURRENTCONDITIONS/HUMIDITY" => "humidity",
33 "/ADC_DATABASE/CURRENTCONDITIONS/WEATHERTEXT" => "weathertext",
34 "/ADC_DATABASE/CURRENTCONDITIONS/WEATHERICON" => "weathericon",
35 "/ADC_DATABASE/CURRENTCONDITIONS/WINDSPEED" => "windspeed",
36 "/ADC_DATABASE/CURRENTCONDITIONS/WINDDIRECTION" => "winddirection",
37 "/ADC_DATABASE/CURRENTCONDITIONS/WINDGUSTS" => "wgusts",
38 "/ADC_DATABASE/PLANETS/SUN" => "sun",
39 "/ADC_DATABASE/FORECAST/DAY/OBSDATE" => "fc_obsdate",
40 "/ADC_DATABASE/FORECAST/DAY/DAYTIME/TXTSHORT" => "fc_dt_short",
41 "/ADC_DATABASE/FORECAST/DAY/DAYTIME/WEATHERICON" => "fc_dt_icon",
42 "/ADC_DATABASE/FORECAST/DAY/DAYTIME/HIGHTEMPERATURE" => "fc_dt_htemp",
43 "/ADC_DATABASE/FORECAST/DAY/DAYTIME/LOWTEMPERATURE" => "fc_dt_ltemp",
44 "/ADC_DATABASE/FORECAST/DAY/DAYTIME/WINDSPEED" => "fc_dt_windspeed",
45 "/ADC_DATABASE/FORECAST/DAY/DAYTIME/WINDDIRECTION" => "fc_dt_winddir",
46 "/ADC_DATABASE/FORECAST/DAY/NIGHTTIME/WEATHERICON" => "fc_nt_icon",
47 "/ADC_DATABASE/FORECAST/DAY/NIGHTTIME/HIGHTEMPERATURE" => "fc_nt_htemp",
48 "/ADC_DATABASE/FORECAST/DAY/NIGHTTIME/LOWTEMPERATURE" => "fc_nt_ltemp",
49 "/ADC_DATABASE/FORECAST/DAY/NIGHTTIME/WINDSPEED" => "fc_nt_windspeed",
50 "/ADC_DATABASE/FORECAST/DAY/NIGHTTIME/WINDDIRECTION" => "fc_nt_winddir",
51 "/ADC_DATABASE/FORECAST/DAY/DAYTIME/WINDGUST" => "fc_dt_wgusts",
52 "/ADC_DATABASE/FORECAST/DAY/NIGHTTIME/WINDGUST" => "fc_nt_wgusts",
53 "/ADC_DATABASE/FAILURE" => "failure"
54 );
55
56 $wpf_pstack .= "/$name";
57
58 if (isset( $wpf_path_table[ $wpf_pstack])) {
59 $wpf_go_ahead = $wpf_path_table[$wpf_pstack];
60
61 if ($wpf_fc_daynumber != "0" and $wpf_fc_daynumber != "")
62 $wpf_go_ahead = $wpf_go_ahead . "_" . $wpf_fc_daynumber;
63 }
64
65 // for forecast days
66 if ($wpf_pstack=="/ADC_DATABASE/FORECAST/DAY")
67 $wpf_fc_daynumber=$attribute["NUMBER"];
68
69 // for current sun rise/set
70 if ($wpf_pstack=="/ADC_DATABASE/PLANETS/SUN")
71 $wpf_weather["sun"]=$attribute["RISE"]." ".$attribute["SET"];
72
73 // for current time daylightsavings
74 if ($wpf_pstack== "/ADC_DATABASE/LOCAL/GMTDIFF") {
75 if ( $attribute["DAYLIGHTSAVINGS"] !="")
76 $wpf_weather['gmtdiffdls'] = $attribute["DAYLIGHTSAVINGS"];
77 else
78 $wpf_weather['gmtdiffdls'] = 0;
79 }
80
81 if ($wpf_debug > 1)
82 pdebug("End of start_element ()");
83 }
84
85 // end_element() - called for every end tag
86 function end_element( $parser, $name )
87 {
88 global $wpf_pstack,$wpf_fc_daynumber,$wpf_debug;
89
90 if ($wpf_debug > 1)
91 pdebug("Start of end_element ()");
92
93 // reduce xml path
94 $wpf_pstack = substr($wpf_pstack,0, strrpos($wpf_pstack,"/"));
95
96 if ($name=="DAY")
97 $wpf_fc_daynumber=0;
98
99 if ($wpf_debug > 1)
100 pdebug("End of end_element ()");
101 }
102
103
104 // daten() - called for everey cdata
105 function daten( $parser, $data )
106 {
107 global $wpf_weather,$wpf_go_ahead,$wpf_debug;
108
109 if ($wpf_debug > 1)
110 pdebug("Start of daten ()");
111
112 if ( strlen($wpf_go_ahead) > 0 and $wpf_go_ahead != "sun" and $wpf_go_ahead != "gmtdiffdls")
113 {
114 $wpf_weather[$wpf_go_ahead]=$data;
115 $wpf_go_ahead = '';
116 }
117
118 if ($wpf_debug > 1)
119 pdebug("End of daten ()");
120 }
121
122 //
123 // parses the xml for the paths in path_tabelle
124 //
125
126 function wpf_xml_parser($xmlstring) {
127 global $wpf_weather,$wpf_pstack,$wpf_go_ahead,$wpf_fc_daynumber,$wpf_debug;
128
129 if ($wpf_debug > 0)
130 pdebug("Start of wpf_xml_parser ()");
131
132 $wpf_weather=array();
133 $xmlerror="";
134
135 $wpf_pstack="";
136 $wpf_go_ahead = "";
137 $wpf_fc_daynumber="0";
138
139 // create an xml parser object
140 $parser = xml_parser_create();
141
142 // set parameters for xml parser
143 xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, true );
144
145 // set handler for start and end-tags
146 xml_set_element_handler( $parser,"start_element","end_element");
147 // set handler for CDATA
148 xml_set_character_data_handler( $parser,"daten");
149
150 // try to parse the xml
151 if( !xml_parse( $parser, $xmlstring,true ) )
152 {
153 // Error --> stop execution
154 $xmlerror="XML Fehler: " .
155 xml_error_string( xml_get_error_code( $parser ) ) . " in Zeile " .
156 xml_get_current_line_number( $parser )
157 ;
158 }
159
160 // Vom XML-Parser belegten Speicher freigeben
161 xml_parser_free( $parser );
162
163 // check for error
164 if ($xmlerror!="") {
165 $wpf_weather=array();
166 }
167
168 if ($wpf_debug > 0)
169 pdebug("End of wpf_xml_parser ()");
170
171 // and return result, empty array if error
172 return $wpf_weather;
173 }
174
175 }
176 ?>