1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

PEAR::XML_Parser: Zeilenumbrüche?

  • maciek
  • 16. Januar 2006 um 12:07
  • Unerledigt
  • maciek
    16
    maciek
    Mitglied
    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 ...

    *** Make it idiot proof, and someone will build a better idiot. ***

  • Ordovicium
    19
    Ordovicium
    Mitglied
    Reaktionen
    23
    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
    16
    maciek
    Mitglied
    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. :winking_face:

    *** Make it idiot proof, and someone will build a better idiot. ***

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung