Announcement

Collapse
No announcement yet.

"Fehlerhafte" XML-Datei trotzdem laden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • "Fehlerhafte" XML-Datei trotzdem laden

    Hallo.

    Ich habe mal ein kleines Problem mit einer XML-Datei. Die ist nicht von mir, aber ich muss bzw. möchte sie benutzen und mit eigenen Informationen ergänzen.
    Das Problem dabei: die Typbibliothek von MSXML kann die XML-Datei nicht lesen (btw: die XML-Datei ist von Microsoft ;o)), weil numerische Werte ohne Anführungszeichen angegeben wurden:

    <pre>&lt;IrgendeinTag value=1234/&gt;</pre>

    Nun sind meine Kenntnisse von XML nun nicht so umfangreich, und ich wüsste gern, ob und wie man solche Dateien trotzdem laden kann. Den Rest kriege ich dann schon hin, nur momentan scheitert´s also schon am Einlesen der XML-Datei. (

    Hat jemand eine gute Idee?

    Gruß,
    Mathias.

  • #2
    So, ich wieder ) -

    Meine Lösung sieht bisher so aus, dass ich die XML-Datei von Microsoft zeilenweise in ein "array of string" einlese (es soll später auf möglichst alle "dicken" Units verzichtet werden, sonst hätte ich auch ´ne TStringlist genommen) und dann jeden String auf das Vorkommen von Gleichheitszeichen und Slash prüfe.

    Sofern vorhanden, wird getestet, ob das Zeichen danach bzw. davor ein Zahlenwert ist, und notfalls werden die Anführungszeichen ergänzt. Dann reiche ich das ganze an einen AnsiString weiter, den ich mit "loadXML" lade:

    <pre>oput := '';
    <b>for</b> i := 0 <b>to</b> length(s) - 1 <b>do</b>
    <b>begin</b>
    <font color=#000080><i>// fix Microsoft´s bugs</i></font>
    <b>if</b>(pos('=',s[i]) &gt; 0) <b>then</b>
    <b>if</b>(s[i][pos('=',s[i])+1] <b>in</b>['0'..'9']) <b>then</b>
    insert('&quot;',s[i],pos('=',s[i])+1);
    <b>if</b>(pos('/',s[i]) &gt; 0) <b>then</b>
    <b>if</b>(s[i][pos('/',s[i])-1] <b>in</b>['0'..'9']) <b>then</b>
    insert('&quot;',s[i],pos('/',s[i]));<br><br>
    oput := oput + s[i];
    <b>end</b>;
    xmldoc.loadXML(oput);</pre>

    Klappt hervorragend, ist aber (IMHO) irgendwie umständlich. Die andere Frage wäre dann noch: was, wenn die XML-Datei, die ich so bearbeiten muss, mal extrem groß ist? Möglicherweise reicht dann ein String-Array nicht aus. Von diversen anderen evtl. auftretenden Fehlern will ich gar nicht erst anfangen.

    Gibt es keinen eleganteren Weg direkt über die XML-Funktionen?

    Gruß,<br>Mathias

    Comment

    Working...
    X