Dorftrottel: Funktion nicht einwandfrei

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(']]>', ']]&gt;', $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;
  1. Hi,

    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>`{:.language-xml}  
    > sowie zwischen den Einträgen ein Enter ist.  
      
    Wie äussert sich dieser Fehler?  
      
    Whitespace zwischen Tags sollte eigentlich keinen Fehler darstellen.  
      
    
    > Und wie entferne ich das Enter zwischen den Datensätzten.  
      
    Die einzige Stelle, wo in deinem Code explizit Zeilenumbrüche irgendwo eingefügt werden, ist folgende:  
    
    >                         $input .= (empty($input))? '' : "\n\n";  
      
    MfG ChrisB  
      
    
    -- 
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    
    1. Hallo

      Wie äussert sich dieser Fehler?

      Ich bekomme eine Fehlermeldung vom Pharser in Zeile 1, wenn ich Datei manuell schreibe und die entsprechenden Zeilen im Header und Footer einfüge, läuft es einwandfrei.

      Die einzige Stelle, wo in deinem Code explizit Zeilenumbrüche irgendwo eingefügt werden, ist folgende:

      $input .= (empty($input))? '' : "\n\n";

      Genau das war es...

      1. Hier noch kurz die Fehlermeldung

        Warning: simplexml_load_file() [function.simplexml-load-file]: sendezeiten.xml:8: parser error : Extra content at the end of the document in C:\xampp\htdocs\test\index.php on line 2

        Warning: simplexml_load_file() [function.simplexml-load-file]: <datensatz> in C:\xampp\htdocs\test\index.php on line 2

        Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in C:\xampp\htdocs\test\index.php on line 2

        Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\test\index.php on line 5

        1. Hi,

          Hier noch kurz die Fehlermeldung

          Warning: simplexml_load_file() [function.simplexml-load-file]: sendezeiten.xml:8: parser error : Extra content at the end of the document in C:\xampp\htdocs\test\index.php on line 2

          Warning: simplexml_load_file() [function.simplexml-load-file]: <datensatz> in C:\xampp\htdocs\test\index.php on line 2

          Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in C:\xampp\htdocs\test\index.php on line 2

          Und wie sieht das XML aus, bei dem diese Fehlermeldung kommt?

          MfG ChrisB

          --
          “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
          1. Und wie sieht das XML aus, bei dem diese Fehlermeldung kommt?

            Hallo,

              
            <datensatz>  
            <date>01.12.2009</date>  
            <sender>Hokuspokus</sender>  
            <time>21:15:00</time>  
            <titel>test</titel>  
            <url>http://meine-URL.de</url>  
            </datensatz>  
            <datensatz>  
            <date>03.12.2009</date>  
            <sender>Hokuspokus</sender>  
            <time>21:15:00</time>  
            <titel>test2</titel>  
            <url>http://meine-URL.deverkauft/</url>  
            </datensatz>
            
            1. Hi,

              Und wie sieht das XML aus, bei dem diese Fehlermeldung kommt?
              Hallo,

              <datensatz>
              <date>01.12.2009</date>
              <sender>Hokuspokus</sender>

                
              Und welche Zeile davon ist jetzt Zeile 2, von der in der Meldung die Rede ist?  
                
              Wie siehst es an der Stelle aus, wenn du es dir mal in einem HEX-Editor anschaust?  
                
              MfG ChrisB  
                
              
              -- 
              “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
              
            2. Hi!

              Und wie sieht das XML aus, bei dem diese Fehlermeldung kommt?
              <datensatz>
              [...]
              </datensatz>
              <datensatz>
              [...]
              </datensatz>

              Und wo ist das Root-Element? Davon muss und darf es nur eins geben.

              Lo!