MySQL - XMLParser - Meldung:(NSXMLParserErrorDomain error 32.)

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • MySQL - XMLParser - Meldung:(NSXMLParserErrorDomain error 32.)

      Hallo zusammen,

      innerhalb meines Projektes nutzte ich PHP für die Übermittlung meines SQL Ergebnisses. Bisher habe ich den zurückgelieferten String direkt verarbeitet. In einigen Artikel wird dazu geraten hierfür XML einzusetzen. Das PHP Script habe ich diesbzgl. angepasst. Es wird nun ein String zurückgeliefert, der das vollständige XML-File enthält. Die Verarbeitung bereitet mir nun etwas Probleme, da ich den XML Parser nur via Stream, URL, oder DATA initialisieren kann.

      Aus diesem Grund konvertiere ich mein gelieferten NSString in ein NSData. Im Anschluss wird NSData in ein NSInputStream geladen.

      Hinweis:
      mySqlResult ist von Type NSString und enthält das vollständige XML File

      NSData *myData = [mySqlResult dataUsingEncoding:NSUTF8StringEncoding];
      NSInputStream *myXMLStream = [NSInputStream inputStreamWithData:myData];

      Aufruf des XML Parser inkl. Init-Wert (eine entsprechende Instanz wurde zuvor erstellt):
      [ownXMLParser parserStartData:myXMLStream];

      liefert mir folgende Meldung:
      (NSXMLParserErrorDomain error 32.)

      Die Parserklasse funktioniert einwandfrei wenn ich diese mit einer URL initialisiere und aufrufe. Das XML File, welches sich in mySqlResult befindet, habe ich als File abgespeichert und mit einer externen App getestet. Dieser Test lieferte die Sicherheit, dass das erstellte XML File i. O. ist.

      Ich nehme mal an, dass ich bei der Konvertierung etwas vergessen oder ausser acht gelassen habe. Wer kann mir hier den entschiedenen Hinweis geben?

      Vielen Dank & Grüße
      -
    • zu 1.:

      Bin mir nun nicht sicher was Du genau meinst.

      Innerhalb von PHP gibt es den Datentyp NSString nicht. PHP kennt nur String und liefert diesen an die aufrufende Methode als Ergebnis zurück. Innerhalb der Methode wird das Ergebnis in einem NSString mySqlResult gespeichert.

      zu 2.:
      JSON sagt mir nun nicht wirklich etwas. Ich werde es nachlesen. Danke.
    • Hallo macmoonshine,

      richtig XMLParser verarbeitet NSData-Objekte. Dies war mein erste Ansatz. Leider funktionierte dieser ebenfalls nicht, daher der Umweg via NSInputStream.

      Die Fehlermeldung deutet lt. Beschreibung daraufhin, dass mit dem Encoding etwas nicht stimmt. Muss unbedingt der Zusatz NSUTF8StringEncoding angegeben werden oder wird bei nicht Angabe automatisch das richtige Encoding eingestellt?
    • OSXDev schrieb:

      Hallo macmoonshine,

      richtig XMLParser verarbeitet NSData-Objekte. Dies war mein erste Ansatz. Leider funktionierte dieser ebenfalls nicht, daher der Umweg via NSInputStream.

      Die Fehlermeldung deutet lt. Beschreibung daraufhin, dass mit dem Encoding etwas nicht stimmt. Muss unbedingt der Zusatz NSUTF8StringEncoding angegeben werden oder wird bei nicht Angabe automatisch das richtige Encoding eingestellt?
      nochmal: du SOLLST NICHT NSString verwenden um daten zu laden sondern die daten auch als NSData bekommen und dann diese korrekten daten verarbtien!
    • OSXDev schrieb:

      Die Fehlermeldung deutet lt. Beschreibung daraufhin, dass mit dem Encoding etwas nicht stimmt. Muss unbedingt der Zusatz NSUTF8StringEncoding angegeben werden oder wird bei nicht Angabe automatisch das richtige Encoding eingestellt?
      Ja, du hast anscheinend ein Kodierungsproblem. Da wird dir eine Umwandlung in einen Stream wenig helfen. ;)

      Wahrscheinlich hast du eine XML-Direktive am Beginn der Daten, die die Kodierung setzt, z. B.: <?xml version="1.0" encoding="ISO-8859-1" ?> Dadurch könnte der Fehler entstehen, da du die Daten ja explizit in UTF-8 umgewandelt hast.
      „Meine Komplikation hatte eine Komplikation.“
    • stimmt

      macmoonshine schrieb:

      Wahrscheinlich hast du eine XML-Direktive am Beginn der Daten, die die Kodierung setzt, z. B.: <?xml version="1.0" encoding="ISO-8859-1" ?> Dadurch könnte der Fehler entstehen, da du die Daten ja explizit in UTF-8 umgewandelt hast.
      Stimmt. Mein XML File sieht folgendermaßen aus:
      <?xml version='1.0' encoding='ISO-8059-1' ?>
      <feed>
      ...

      Aus 'ISO-8059-1' wurde 'utf-8'. Nun erhalte ich die Meldung: "Unknown encoding 2711724449"
    • OSXDev schrieb:

      stimmt

      macmoonshine schrieb:

      Wahrscheinlich hast du eine XML-Direktive am Beginn der Daten, die die Kodierung setzt, z. B.: <?xml version="1.0" encoding="ISO-8859-1" ?> Dadurch könnte der Fehler entstehen, da du die Daten ja explizit in UTF-8 umgewandelt hast.
      Stimmt. Mein XML File sieht folgendermaßen aus:<?xml version='1.0' encoding='ISO-8059-1' ?>
      <feed>
      ...

      Aus 'ISO-8059-1' wurde 'utf-8'. Nun erhalte ich die Meldung: "Unknown encoding 2711724449"
      WILLST DU UNS VERARSCHEN?
      Stell mal von NSString auf NSData um und das problem ist gelöst!
    • OSXDev schrieb:

      Der direkte Weg über NSData ohne Umweg via NSInputStream ist mit Sicherheit eleganter und schont Ressourcen.

      Wie bereits von mir angemerkt war dies mein erster Ansatz.

      Nachdem ich das Encoting Tag vollständig entfernt hatte, funktioniert nun alles einwandfrei.

      Danke.
      es geht hier nicht um NSInputStream sondern um NSString. du sollst das ergebnis nicht als NSString holen sondenr als NSData.
      und die encoding info soll im xml drin sein!
      wo lernt man blos sowas...?
    • Der Ansatz die vom PHP Script gelieferten Daten in einem NSData abzulegen und den Parser anschließend mit diesem zu initialisieren funktioniert nun ebenfalls.

      @gritsch: Nicht gleich so impulsiv werden! Für mich ist es m.E. i.A. wichtiger viele Wege auszuprobieren und Lösungen zu erhalten, als gleich den "besten" Weg zu beschreiten.

      Nachmals allen Vielen Dank.
    • OSXDev schrieb:

      Der Ansatz die vom PHP Script gelieferten Daten in einem NSData abzulegen und den Parser anschließend mit diesem zu initialisieren funktioniert nun ebenfalls.

      @gritsch: Nicht gleich so impulsiv werden! Für mich ist es m.E. i.A. wichtiger viele Wege auszuprobieren und Lösungen zu erhalten, als gleich den "besten" Weg zu beschreiten.

      Nachmals allen Vielen Dank.
      also wenn ich die lösung nenne und dann jemand noch 5 posts schreibt in denen er fragt wie es gehen könnte und dann irgendwelche "wurstellösungen" vorschlägt dann kann man schon mal impulsiv werden.

      ja, manchmal gibt es mehrere wege zum ziel, hier gibt es aber nur einen korrekten!
    • gritsch schrieb:

      also wenn ich die lösung nenne und dann jemand noch 5 posts schreibt in denen er fragt wie es gehen könnte und dann irgendwelche "wurstellösungen" vorschlägt dann kann man schon mal impulsiv werden.
      ja, manchmal gibt es mehrere wege zum ziel, hier gibt es aber nur einen korrekten!
      Nun ja, Deine Antworten bezogen sich auf Deinen Lösungsansatz nicht auf meine Fragen. Was die verschiedenen Lösungswege betrifft stimme ich Dir zu, nur diesbzgl. Wertungen abzugeben dient dem Sachverhalt überhaupt nicht.

      Ist eigentlich nicht meine Art so etwas zu kommentieren. Jedoch überkommt mich ein gewaltiges Schmunzeln wenn ich den letzten Teilsatz lese, den wer so eine Meinung von sich hat - um nicht zu sagen so überzeugt von sich ist - sollte Papst werden. :rolleyes:
    • OSXDev schrieb:

      gritsch schrieb:

      also wenn ich die lösung nenne und dann jemand noch 5 posts schreibt in denen er fragt wie es gehen könnte und dann irgendwelche "wurstellösungen" vorschlägt dann kann man schon mal impulsiv werden.
      ja, manchmal gibt es mehrere wege zum ziel, hier gibt es aber nur einen korrekten!
      Nun ja, Deine Antworten bezogen sich auf Deinen Lösungsansatz nicht auf meine Fragen. Was die verschiedenen Lösungswege betrifft stimme ich Dir zu, nur diesbzgl. Wertungen abzugeben dient dem Sachverhalt überhaupt nicht.
      Ist eigentlich nicht meine Art so etwas zu kommentieren. Jedoch überkommt mich ein gewaltiges Schmunzeln wenn ich den letzten Teilsatz lese, den wer so eine Meinung von sich hat - um nicht zu sagen so überzeugt von sich ist - sollte Papst werden. :rolleyes:
      also du scheinst es noch nicht verstanden zu haben:

      1. habe ich eine möglichkeit genannt wie du es auch machen könntest: JSON

      2. habe ich die lösung für dein problem genannt: NSData anstatt NSString verwenden

      3. gibt es hier nun mal nur eine korrekte lösung. der umweg über NSString ist einfach nur falsch und man kann nur NSData als ausgangsklasse verwenden (oder raw-bytes oder ähnliches wenn du meinst, aber sicher kein NSString). das hat nichts damit zu tun ob ich von mir überzeugt bin oder nicht sondern einfach nur damit dass ich nicht daran zweifle dass 1+2 drei ergibt ;)