1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

PEAR::XML_Parser: Zeilenumbrüche?

  • maciek
  • 16. Januar 2006 um 12:07
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • maciek
    Punkte
    2.805
    Beiträge
    434
    • 16. Januar 2006 um 12:07
    • #1

    Hi Zusammen!

    Ich hab ein Problem mit Zeilenumbrüchen und Umlauten in XML-Dateien. Und zwar bekomme ich in einem CDATA immer beim ersten Umlaut einen Zeilenumbruch, obwohl da keiner ist.

    Beispiel: <kommentar>möglicherweise falsch</kommentar>

    wird zu:
    -> opening tag: kommentar
    [cdata]: 'm'
    [cdata]: 'öglicherweise falsch'
    <- closing tag: kommentar

    Jetzt kann ich natürlich hergehen und jeden ersten Umlaut in einem cdata finden, nur ist das nicht die feine englische Art. Hat jemand von Euch so ein Problem schon mal gehabt bzw. habt Ihr eine Ahnung woran das liegen könnte?

    Mir ist das nämlich ziemlich rätselhaft ...

  • Ordovicium
    Punkte
    3.693
    Artikel
    13
    Beiträge
    569
    • 26. Januar 2006 um 02:15
    • #2

    Ich weiß jetzt zwar nicht wie dein Code aussieht aber eigentlich sollte das laut docu ned so auftauchen:

    PHP
    <?php
    require_once 'XML/Parser.php';
    
    
    class myParser extends XML_Parser
    {
      function myParser()
      {
        parent::XML_Parser();
      }
    
    
     /**
      * handle start element
      *
      * @access private
      * @param  resource  xml parser resource
      * @param  string    name of the element
      * @param  array     attributes
      */
      function startHandler($xp, $name, $attribs)
      {
        printf('handle start tag: %s<br />', $name);
      }
    
    
     /**
      * handle start element
      *
      * @access private
      * @param  resource  xml parser resource
      * @param  string    name of the element
      */
      function endHandler($xp, $name)
      {
        printf('handle end tag: %s<br />', $name);
      }
    
    
     /**
      * handle character data
      *
      * @access private
      * @param  resource  xml parser resource
      * @param  string    character data
      */
      function cdataHandler($xp, $cdata)
      {
        // does nothing here, but might e.g. print $cdata
      }
    }
    
    
    $p = &new myParser();
    
    
    $result = $p->setInputFile('xml_parser_file.xml');
    $result = $p->parse();
    ?>
    Alles anzeigen


    Obwohl ich zugeben muss, dass ich XML noch immer mit PHP parse:

    PHP
    <?php
    
    
    class XMLParser {
       var $filename;
       var $xml;
       var $data;
    
       function XMLParser($xml_file)
       {
           $this->filename = $xml_file;
           $this->xml = xml_parser_create();
           xml_set_object($this->xml, $this);
           xml_set_element_handler($this->xml, 'startHandler', 'endHandler');
           xml_set_character_data_handler($this->xml, 'dataHandler');
           $this->parse($xml_file);
       }
    
       function parse($xml_file)
       {
           if (!($fp = fopen($xml_file, 'r'))) {
                 die('Cannot open XML data file: '.$xml_file);
                   return false;
           }
    
    
           $bytes_to_parse = 512;
    
    
           while ($data = fread($fp, $bytes_to_parse)) {
               $parse = xml_parse($this->xml, $data, feof($fp));
    
               if (!$parse) {
                   die(sprintf("XML error: %s at line %d",
                       xml_error_string(xml_get_error_code($this->xml)),
                           xml_get_current_line_number($this->xml)));
                           xml_parser_free($this->xml
                         );
               }
           }
    
    
           return true;
       }
    
       function startHandler($parser, $name, $attributes)
       {
           $data['name'] = $name;
           if ($attributes) { $data['attributes'] = $attributes; }
           $this->data[] = $data;
       }
    
    
       function dataHandler($parser, $data)
       {
           if ($data = trim($data)) {
               $index = count($this->data) - 1;
               // begin multi-line bug fix (use the .= operator)
               $this->data[$index]['content'] .= $data;
               // end multi-line bug fix
           }
       }
    
    
       function endHandler($parser, $name)
       {
           if (count($this->data) > 1) {
               $data = array_pop($this->data);
               $index = count($this->data) - 1;
               $this->data[$index]['child'][] = $data;
           }
       }
    }
    
    
    ?>
    Alles anzeigen
  • maciek
    Punkte
    2.805
    Beiträge
    434
    • 26. Januar 2006 um 09:20
    • #3
    Zitat von Ordovicium

    Ich weiß jetzt zwar nicht wie dein Code aussieht aber eigentlich sollte das laut docu ned so auftauchen:


    eben ... sollte nicht, tut es aber. Ich hab das Problem jetzt auf jeden Fall gelöst, dass ich vor dem Parsen alle Umlaute maskiere und dann in der CDATA-Funktion die Maskierung wieder umdrehe.

    Zitat von Ordovicium

    Obwohl ich zugeben muss, dass ich XML noch immer mit PHP parse:


    schaut auch interessant aus. Werd ich beim nächsten Mal ausprobieren. ;)

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum