XML-File als ASCII öffnen

Hallo
ich habe ein XML-File, welches ich als ASCII-Datei öffnen möchte, um dabei Daten herauszuziehen.

Problem 1: Die Datei ist verschlüsselt und muß zunächst mit einem Tool (Winzip, 7.zip) dekomprimiert werden. Geht das, das File beim öffnen mit VB automatisch zu dekomprimieren, so das ich es als ASCII-Datei vorliegen habe??? Oder muß ich das extra tun und die Datei neu als ASCII abspeichern. Auch hier die Frage, ob das automatisiert über VB geht.

Problem 2: Wenn ich Problem 1 gelöst habe, habe ich die Datei als ASCII vorliegen im XML-Format. Im internetexplorer kann ich sie öffnen, und alles ist zeilenweise aufgebaut (liegt wohl am Format).
Im TExteditor liegt aber alles hintereinander ohne FOrmatierung.
Geht es, das File genauso wie im Internetexplorer zu formatieren???
Dann könnte ich zeilenweise auf die Daten zugeifen, das wäre besser für mich.

Viele Fragen, ich hoffe auf einfache Antworten.

Mfg Werner

Ergänzung für VB6!!!
ich sollte vielleicht noch ergänzen, das es um VB6 geht.

Habe was im Internet mit Parsern gefunden.
Hilft mir das weiter, was ist das genau???

Mfg Werner

Hallo Werner,

Habe was im Internet mit Parsern gefunden.
Hilft mir das weiter, was ist das genau???

ein Parser ‚übersetzt‘ einen Code in ein lesbares Format.

Beispiel Telnet:
Du baust eine Telnetsession zu einem Server mit Winsock auf und bekommst vom Server Daten. Cryptisches, mit bloßem Auge nicht lesbares Zeugs. :smile:
Der Parser zerlegt dem empfangenen String und übersetzt ihn Dir in ein Lesbares Format. Wenn Du dann das anzeigst, was Du empfangen und übersetzt hast, weißt Du, daß Dich der Server auffordert, Deinen Loginnamen einzugeben. Den gibst Du ein, der muß wieder durch den Parser und der Server bekommt den Namen in einem Format, das er versteht …

Keine Ahnung, ob Dir das hilft.

Gruß, Rainer

Hallo Werner,

die Bearbeitung eines XML Dokumentes per SubString, Line etc. ist nicht „waidgerecht“. VB ist sehr wohl dazu in der Lage, dass auch als XML zu interpretieren, zu bearbeiten und per XPath zu „filtern“.

Ich rate dringend dazu, es wirklich per XML und den entsprechenden Funktionen zu machen.

Dim doc As MSXML.DOMDocument
Dim myNode As MSXML.IXMLDOMNode
orgStreamDoc.loadXML(xmlString)
For Each myNode In orgStreamDoc.selectNodes("/dickeTag")
 myNode.text= "mein neuer Text"
next

mfg

Dirk.Pegasus

Hi
Hallo Dirk
danke für die Antwort.
Ich möchte aber das XML-File nicht bearbeiten, sondern nur die Infos rausziehen und in ein Excelfile abspeichern. Daher brauche ich mich nicht um die Struktur des XML-Files kümmern, sondern muß mir nur meine Daten suchen.

Ich denke das geht dann immer zwischen den Klammerbereichen .
Ich frage mich nur, wie das ASCII-File aussieht.
Ist das dann eine Zeile oder wo hört eine Zeile auf???

Wie stehst mit derdekomprimierung vorher???

Mfg Werner

Hallo Werner,

Ich denke das geht dann immer zwischen den Klammerbereichen
.

Das muss nicht so sein. Auch in den Tags können Informationen in Form von Attributen stecken:

und nun noch andere Inhalt

Der Inhalt kann dann auch noch als CDATA geakpselt sein:

Ich frage mich nur, wie das ASCII-File aussieht.
Ist das dann eine Zeile oder wo hört eine Zeile auf???

Das Ascii kann Zeilenumbrüche beinhalten, muss es aber nicht. Dein Browser interpretiert das XML und ergänzt diese und auch Einzüge. Sogar „+“ und „-“ ergänzt der, um Äste auf und zu zu machen. Was du dort siehst, ist halt aufbereitet.

Wie stehst mit derdekomprimierung vorher???

Leider keine Ahnung. Kommt das öfter vor? Ggfs. kann man das per batch abarbeiten.

mfg

Drik.Pegasus

EINE Zeile???
Hallo
habe das Gefühl, das XML ist in ASCII eine Zeile.
Wie kann ich da mehr Zeichen als die 65000 und ein paar fangen, wenn die Anzahl der Zeichen im String begrenzt ist, geht das dann einfach mit MID$???

Eine Zeile Code wäre hilfreich.

Mfg Werner

Hallo Werner,

habe das Gefühl, das XML ist in ASCII eine Zeile.

das kann sein, so etwas habe ich mir noch nicht angesehen. Ich habe aber auch Daten, die ich als einen einzigen langen String bekomme und in Datensätze und Felder zerlege. Ich habe da aber feste Längen und Adressen.

Wie kann ich da mehr Zeichen als die 65000

Wie kommst Du bei String auf die Grenze der Integer Variablen? Der String kann länger sein, wenn ich mich nicht irre.

und ein paar
fangen, wenn die Anzahl der Zeichen im String begrenzt ist,
geht das dann einfach mit MID$???

Das sollte so einfach gehen, Du darfst nur die Variablen, die Du verwendest nicht als Integer deklarieren, sondern als Long.

Wenn Du den Dateiinhalt aber lieber Blockweise lesen und verarbeiten möchtest, sollte das auch gehen.

Den Code habe ich nur mal getippt, nicht getestet, ich hoffe, der läuft so …

Option Explicit

Private Sub Command1\_Click()
 Dim Na As String
 Dim Cnt As Long
 Dim Bl As Long
 Dim Rest As Long
 Dim i As Integer
 Dim ff As Integer
 Dim txt As String

 Na = "C:\Test.txt"

 Cnt = FileLen(Na)
 Bl = Int(Cnt / 1024)
 Rest = Cnt - (Bl \* 1024)

 ff = FreeFile
 Open Na For Binary As #ff

 If Bl \> 0 Then
 For i = 1 To Bl
 txt = Space(1024)
 Get #ff, , txt
 verarbeiten txt
 Next
 End If

 txt = Space(Rest)
 Get #ff, , txt
 verarbeiten txt

 Close #ff
End Sub

Private Sub verarbeiten(ByVal Text As String)
 'Deine Verarbeitung
End Sub

Gruß, Rainer

hi
Hallo Rainer,
wo ist dann die Grenze bei einer LongVariable.
Mein XML hat wohl 670000 Zeichen in EINER! zeile.

Ist es richtig, das du immer 1024 Zeichen zerlegst in deinem Beispiel???

Mfg Werner

Nachtrag
Hallo Werner,

probier mal diesen Code:

Option Explicit

Private Sub Command1\_Click()
 Dim txt As String
 txt = Space(900000)
 Me.Caption = Len(txt)
End Sub

Bekommst Du auch eine Länge von 900 000 Zeichen zurück? Bei mir kein Problem.

Gruß, Rainer

Hallo Werner,

wo ist dann die Grenze bei einer LongVariable.

4294967259

Hexadezimal wird es verständlicher: &hff ff ff ff … 4 Bytes.

Mein XML hat wohl 670000 Zeichen in EINER! zeile.

Ist es richtig, das du immer 1024 Zeichen zerlegst in deinem
Beispiel???

Ja, immer 1k. Was Du da machst, ist Dir überlassen, war nur ein Beispiel.

Gruß, Rainer

Hallo Werner,

bevor Du Dir die Arme brichst. :smile:

Bisher habe ich verstanden, daß Du einen langen Text bekommst und das was zusammen gehört immer in spitzen Klammern steht. „“ Richtig?
Und das möchtest Du nun in Zeilen angezeigt haben …

Dann mach das doch einfach mit Replace:

Option Explicit

Private Sub Command1\_Click()
 Dim Na As String
 Dim Cnt As Long
 Dim ff As Integer
 Dim Txt As String

 ff = FreeFile
 Na = "C:\Test.txt"
 Cnt = FileLen(Na)
 Txt = Space(Cnt)

 Open Na For Binary As #ff
 Get #ff, , Txt
 Close #ff

 Txt = Replace(Txt, "\>" & vbCrLf & "

Bei der Verwendung der Richtextbox lässt sich der Code aber auch noch weiter verkürzen:



    
    Option Explicit
    
    Private Sub Form\_Load()
     RichTextBox1.FileName = "C:\Test.txt"
     RichTextBox1.Text = Replace(RichTextBox1.Text, "\>" & vbCrLf & "
    
    Noch einfacher wird's wohl nicht gehen. :smile:
    
    Gruß, Rainer