[VB] Suche XML-Parser

Registriert
Dez. 2002
Beiträge
184
Hallöchen!

Ich möchte in einem Programm einige Werte (es sind ne ganze Menge) in eine Datei schreiben. Zuerst dachte ich mir, ich mache das per Datenbank (Access), doch dabei werden die Dateien einfach zu groß.
Deshalb würde ich das Ganze gerne in XML machen und brauche dafür einen Parser.

Die Anforderungen hinsichtlich XML-ist-richtig-geschrieben-Syntax sind klein, kenne mich so gut wie nicht damit aus.
Mir ist eher wichtig, dass der Parser die Sektion erkennt.

z.B.
Code:
<sektion 1>
     <untersektion 1>Wert 1</untersektion 1>
     <untersektion 2>Wert 2</untersektion 2>
</sektion 1>
<sektion 2>
     <untersektion 1>Wert 1</untersektion 1>
     <untersektion 2>Wert 2</untersektion 2>
</sektion 2>
Denn genau hier liegen kleinere Probleme. Ich hab mich mal selbst versucht, ging aber gründlich in die Hose, da ich die Werte der Untersektionen von sektion 1 bekam, obwohl ich die von Sektion 2 wollte (die haben die gleichen Namen...that's the point!

Kennt ihr da was? Sollte übrigens Freeware sein...:D

Greets - und danke im Voraus - SK
 
Der MSXML-Engine, der bei jedem Windows seit 98 beiliegt, ist dir wohl noch nicht genug...?
 
Schattenkanzler schrieb:
Ich möchte ... Werte (... ne ganze Menge) in eine Datei schreiben. Zuerst ... per Datenbank (Access), ... Dateien ... zu groß.
Deshalb ... XML
Öhm... in einer DB hast du einen Overhead von vielleicht 2-3 Bytes pro Feld, bei XML sind es MINDESTENS 4 Bytes (wenn du keine Daten speicherst -> <x/>).

---

Schattenkanzler schrieb:
Mir ist eher wichtig, dass der Parser die Sektion erkennt.
---code---
Denn genau hier liegen kleinere Probleme. ..., ging aber gründlich in die Hose, da ich die Werte der Untersektionen von sektion 1 bekam, obwohl ich die von Sektion 2 wollte (die haben die gleichen Namen...that's the point!
Naja, kein Wunder... du hast zweimal den Tag <sektion>, falls du _wirklich_ "sektion 1" und "sektion 2" benutzt dann einmal mit dem Attribut 1 (="1" wenn du valides XML schriebest) und einmal mit dem Attribut 2 (="2")... (die laut XML aber afaik sowieso verboten sind, da Ziffer am Anfang des Attributnamens).
Ausserdem kann man XML (von einigen Ausnahmen angesehen) besser für den sequentiellen einsetzen, also einer nach dem Anderen, als -wie du es zu wollen scheinst- gezielt zwischen einzelnen Datensätzen hin und her zu springen - du musst sowieso alles was vorher kommt mitparsen, um zu wissen, wo dein Datensatz anfängt. Beim Speichern von Binärdaten könntest du z.B. einen 4-Byte-Header vor jeden Datensatz stellen, in dem du speicherst wie lang er ist und damit die Möglichkeit hast, unerwünschte Datensätze zu überspringen.

So viel dazu. Falls du immernoch einen XML-Parser haben willst:
1. Der MSIE 6 unterstützt XML 2, schau mal, ob du vielleicht schon daher ein brauchbares ActiveX bekommst.
2. Wenn du dann auch bei Google nicht fündig wirst such dir eine ANSI-C-konforme XML-Bibliothek für C und benutz sie über die Declares.
 
@Rika: Von der wusste ich zum Zeitpunkt des Postens noch nix *duck*
Jetzt kenn ich sie (würde sie auch gerne verwenden) allerdings komme ich damit nicht klar.
Kennt jemand ein nettes Tutorial dazu? Wurde bisher noch nicht wirklich fündig!

Greets - SK
 
Ich habe auf planetsourcecode.com folgenden Code gefunden:
Code:
Private Sub Command1_Click()
  Dim oDom As New MSXML2.DOMDocument30
   Dim oElement As MSXML2.IXMLDOMElement
   Dim oNode As MSXML2.IXMLDOMNode
   
   With oDom
       Set oNode = .appendChild(.createElement("MyElementRoot"))
       Set oNode = oNode.appendChild(.createElement("MyElement"))
       Set oNode = oNode.appendChild(.createElement("MyElement2"))
       oNode.Text = "Test 1"
       Set oNode = oNode.appendChild(.createElement("MyElement3"))
       oNode.Text = "Test 2"
   End With
 
   oDom.save "c:\myxml.xml"
  
  Set oDom = Nothing
  Set oNode = Nothing
End Sub

Er funktioniert auch ganz gut, nur habe ich damit ein Problem (ich habe o.g. Code schon ein bisschen angepasst).
Ich möchte jetzt beispielsweise, dass das so aussieht:
Code:
<MyElementRoot>
     <MyElement>
          <MyElement2>Wert von 2, hier "Test 1"</MyElement2>
          <MyElement3>Wert von 3, hier "Test 2"</MyElement3>
     </MyElement>
</MyElementRoot>
Doch leider sieht es so aus:
Code:
<MyElementRoot>
     <MyElement>
          <MyElement2>Test 1
               <MyElement3>Test 2</MyElement3>
          </MyElement2>
     </MyElement>
</MyElementRoot>

Kann mir da wer helfen?

Greets - SK
 
Zurück
Oben