Hallo,
ich schreibe aus einer Datenbank eine schöne XML Datei leider ist diese nicht konform mit den XML Standarts.
Weil der Anfang
<?xml version="1.0" standalone="yes"?>
<datenbank>
als auch das Ende
</datenbank>
sowie zwischen den Einträgen ein Enter ist.
Die Funktion habe ich entdeckt (siehe unten) auch die Stelle wo scheinbar alle Daten eingefügt werden $xml_sdr_tmp_html aber wo kann ich jetzt den XML Header und Footer einfügen? Und wie entferne ich das Enter zwischen den Datensätzten.
function rs_make_xml()
{
global $wpdb, $rs_event_defaults;
if ( $_REQUEST['gkmodes'] == 'regen_xml_file' )
{
if ( $fp = @fopen(ABSPATH . 'zeiten.xml', 'w+') )
{
// Cachedatei vorbereiten
$input = '';
$lower_time = time();
$sort_order = 'ASC';
$query_string = "
SELECT DISTINCT
meta.meta_value as `date`,
post.post_title as `title`,
post.post_content as `fulltext`,
post.ID as id,
post.post_excerpt as `excerpt`
FROM
{$wpdb->postmeta} as meta,
{$wpdb->posts} as post,
{$wpdb->term_relationships} as cats
WHERE
meta.post_id = post.ID
AND
post.ID = cats.object_id
AND
meta.meta_key = 'rs_event'
AND
post.post_date <= '".current_time('mysql')."'
AND
meta.meta_value >= {$lower_time}
AND
post.post_status = 'publish'
ORDER BY
meta.meta_value {$sort_order}";
/*** Get a list of the events from our query string */
$event_list = $wpdb->get_results($query_string);
/*** Items for outputting will be placed here for imploding later */
$output_array = array();
/*** If the query has returned an array, do stuff */
if(is_array($event_list))
{
/*** To store previous dates if we have $group_by_date turned on */
$previous_date = false;
/*** Loop through each event */
foreach($event_list as $event)
{
$show_time = 1;
if (strlen($event->date) == 11) {
$show_time = 0;
settype($event->date, "integer");
}
$output_date = date('d.m.Y', $event->date);
$output_time = date('H:i:s', $event->date);
if('' == $event->excerpt)
{
$event->excerpt = $event->fulltext;
$event->excerpt = apply_filters('the_content', $event->excerpt);
$event->excerpt = str_replace(']]>', ']]>', $event->excerpt);
$event->excerpt = strip_tags($event->excerpt);
$excerpt_length = 55;
$words = explode(' ', $event->excerpt, $excerpt_length + 1);
if (count($words) > $excerpt_length)
{
array_pop($words);
array_push($words, '[...]');
$event->excerpt = implode(' ', $words);
}
}
/*** Tidy these up into keys/values and add filters */
$query_string_2 = 'SELECT `meta_value` FROM ' . $wpdb->postmeta . ' WHERE `post_id`=' . $event->id . ' AND `meta_key`=\'rs_sender\'';
$temp2 = $wpdb->get_var($query_string_2);
$xml_sdr_tmp_html = "<datensatz>
<date>%DATE%</date>
<sender>%SENDER%</sender>
<time>%TIME%</time>
<titel>%TITLE%</titel>
<url>%URL%</url>
</datensatz>";
$replacements = array
(
'%URL%' => get_permalink($event->id),
'%DATE%' => apply_filters('the_date', $output_date),
'%TIME%' => apply_filters('the_time', $output_time),
'%TITLE%' => apply_filters('the_title', $event->title),
'%SENDER%' => $temp2,
'%FULLTEXT%' => apply_filters('the_content', $event->fulltext),
'%EXCERPT%' => apply_filters('the_excerpt', $event->excerpt),
);
$replacements['%TIME%'] = $values['time_separator'] . $replacements['%TIME%'];
if ($show_time == 0) {
$replacements['%TIME%'] = "";
}
$xml_sdr_tmp_html = str_replace(array_keys($replacements), array_values($replacements), $xml_sdr_tmp_html);
$input .= (empty($input))? '' : "\n\n";
$input .= $xml_sdr_tmp_html;
}
}
@flock($fp, LOCK_EX);
@fwrite($fp, $input);
@flock($fp, LOCK_UN);
@fclose($fp);
@chmod(ABSPATH . 'wp-content/plugins/sendezeiten.xml', 0777);
}
exit;