PluginProbe
wp-forecast / 1.6
wp-forecast v1.6
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 1.6, at func_xml_parse.php

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