vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
XML Node aus Variable 
Autor: Badenzer
Datum: 07.09.10 19:41

Hi,

wie kann ich einen XML Node, den ich in einer Variablen habe, angeben?

Module Module1
    Dim XDoc1 As XDocument = XDocument.Load("Z:\temp\config.xml")
    Sub Main()
 
        Dim filelist() As String = Split(XDoc1.<files>.<filelist>.Value, ";")
 
        For i = 1 To filelist.Length
            XDoc1.<files>.< & filelist(i) & >.<fields>.value '<------- das hier 
            ' funktioniert nicht
 
        Next
 
        Dim fileContents As String
        fileContents = My.Computer.FileSystem.ReadAllText("Z:\Temp\PACK.TXT")
 
        Dim variable() As String = Split(fileContents, "", , _
          CompareMethod.Text)
 
        Console.WriteLine(variable.Length)
 
    End Sub
 
End Module
Ich hoffe es ist verständlich was ich meine, ich weiß grad nicht wie ich es beschreiben soll...

Gruß
Badenzer
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: XML Node aus Variable 
Autor: ModeratorDaveS (Moderator)
Datum: 08.09.10 09:57

Ehrlich gesagt habe ich wenig Ahnung was du da machst, du auch, vermute ich. Und das Schema der Xml hat einige Schwächen, wie es aussieht. XDodument liefert grundsätzlich Linq Queries, daher solltest du dich zuerst mit diesem Thema anfreunden, schlage ich vor.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: XML Node aus Variable 
Autor: Badenzer
Datum: 09.09.10 08:03

kann mir jemand gute Tutorials zu diesem Thema empfehlen?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: XML Node aus Variable 
Autor: ModeratorDaveS (Moderator)
Datum: 09.09.10 09:23

Was willst du eigentlich machen? Brauchst du Linq überhaupt (du machst Sql-artige Abfragen über Xml Daten?) oder willst du nur etwas Xml einlesen und be/verarbeiten?

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: XML Node aus Variable 
Autor: Badenzer
Datum: 09.09.10 19:33

Ich möchte Dateien parsen, welche in etwa so aufgebaut sind:
06.09.2010                                                   Packing time stamp _
  data                                                                  1
+------------------------------------------------------------------------------_
----------------------------------------------------------------------+-
+------------------------------------------------------------------------------_
----------------------------------------------------------------------+
|Object key                     Msg. Created on Time     Proc.date  Prc.time _
User name    DSN    ODev                                                |
+------------------------------------------------------------------------------_
----------------------------------------------------------------------+
|1404929279                     ZSD1 03.09.2010 04:50:46 00.00.0000 00:00:00 _
USER2               E1T9                                                |
|1622120448                     ZSD1 03.09.2010 01:53:56 03.09.2010 05:05:38 _
USER1               E1T2                                                |
|1404928944                     ZSD1 03.09.2010 03:05:08 03.09.2010 04:19:29 _
USER2               E1T6                                                |
|1404928945                     ZSD1 03.09.2010 03:05:08 03.09.2010 04:18:31 _
USER5               E1T7                                                |
|1622120555                     ZSD1 03.09.2010 03:05:29 03.09.2010 03:43:38 _
USER1               E1T7                                                |
|1622120556                     ZSD1 03.09.2010 03:05:29 03.09.2010 03:46:43 _
USER2               E1T7                                                |
|1622120557                     ZSD1 03.09.2010 03:05:29 03.09.2010 03:43:51 _
USER1               E1T9                                                |
|1404929422                     ZSD1 03.09.2010 06:59:13 03.09.2010 07:11:56 _
USER1               E1T6                                                |
|1622120485                     ZSD1 03.09.2010 02:04:54 03.09.2010 02:50:26 _
USER4               E1T9                                                |
Im XML würde ich gerne hinterlegen welches Feld an welcher Position steht und wie lang dieses Feld ist.

Das XML sieht im Moment so aus:
<?xml version="1.0" encoding="utf-8" ?> 
<files>
    <filelist>PACK.TXT</filelist>
    <PACK.TXT>
        <fields>9</fields>
        <field01>Object_key,2,10</field01>
        <field02>Msg,33,4</field02>
        <field03>Created_on,38,10</field03>
        <field04>Time,49,8</field04>
        <field05>Proc_date,58,10</field05>
        <field06>Prc_time,69,8</field06>
        <field07>User_name,78,12</field07>
        <field08>DSN,91,6</field08>
        <field09>ODev,98,7</field09>
    </PACK.TXT>
</files>
Wenn weiter Dateien geparst werden sollen kommt der Dateiname ins Node <filelist>. Zusätzlich wir ein Node <DATEINAME> mit Childnodes erstellt, welche die benötigten Informationen beinhalten.

Ich hoffe ich habe einigermaßen verständlich ausgedrückt, was ich vorhabe.


P.S. leider verschiebt der code-Tag im Forum den Auszug aus dem File einbisschen. Ein Datensatz = eine Zeile.

Grüße
Badenzer
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: XML Node aus Variable 
Autor: ModeratorDaveS (Moderator)
Datum: 09.09.10 20:50

Also, erstens (sei bitte nicht beleidigt falls du daran beteiligt warst) ist das ziemlich beispielhaft für schlechte Xml. Damit kann man kaum mit Xml-Werkzeugen sinnvoll umgehen, und gar nicht ohne fremde Sachen wie String.Split() zu verwenden. Sowas wäre meiner Meinung nach wesentlich besser
<?xml version="1.0" encoding="utf-8" ?> 
<files >
    <file name='PACK.TXT' fieldCount='9'>
        <field>Object_key,2,10</field>
        <field>Msg,33,4</field>
        <field>Created_on,38,10</field>
        ...
    </file>
    <file name='...'>
    ...
    </file>
    ...
</files>
Da ist alles einfacher und einheitlich und man kann viel leichter Xml-mäßig Abfragen erstellen. (fieldCount ist in der Tat auch überflüssig weil man mit XPath ganz leicht die Anzahl der Unterelemente feststellen kann). Eventuell wäre es vorteilhaft Attribute auch für die field-Elemente zu verwenden, wie name=, start=, length=, zB. Das wäre sowas wie
<field name='Object_key' start='2' length='10' />.
Sonst muss man umständlich Werte aus filelist holen und splitten, man weiß nicht wie die Elemente heißen ohne die Anzahl zu kennen, und die Namen wie file01 sind sowieso überflüssig, da sie sich ohnehin aus der Reihenfolge ergeben. Stell dir vor du willst alle Felder für dateiName=xxx bekommen und du weißt nicht mal wie die Felder heißen. So umgeschrieben kann man leicht XmlDocument und XPath einsetzen. ZB alle Felder einer Datei so auflisten
        Dim xd As New XmlDocument
        xd.Load("C:\Users\Testuser\Test\files.xml")
 
        For Each file As XmlNode In xd.SelectNodes( _
          "//files/file[@name='PACK.TXT']/field")
            Debug.WriteLine(String.Format("Name={0}, start={1}, length={2}", _
            file.Attributes("name").Value, file.Attributes("start").Value, _
            file.Attributes("length").Value))
        Next
Das sieht denn so aus:
Name=Object_key, start=2, length=10
Name=Msg, start=33, length=4
Name=Created_on, start=38, length=10
Ich weiß natürlich nicht was Sinn der Sache ist (irgendwie etwas schwer zu begreifen) und was du dann mit der Xml anstellen willst um konkret weitere Vorschläge zu machen. Bei allem Respekt vor dem versuchten Einsatz von modischer Xml sollte man vielleicht zuerst einigermassen damit vertraut sein bevor man mit dem Entwurf von Xml Schemas anfängt. Sonst wird man sehr wahrscheinlich mit wesentlichen Problemen bei der späteren Bearbeitung konfrontiert.

(geändert: fileCount sollte fieldCount sein).

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: XML Node aus Variable 
Autor: Badenzer
Datum: 09.09.10 21:43

Also, erstens (sei bitte nicht beleidigt falls du daran beteiligt warst) ist das ziemlich beispielhaft für schlechte Xml.

Auch wenn ich nicht nur beteiligt, sondern sogar ganz alleine dran war, bin ich bestimmt nicht beleidigt
Das ist das erste Projekt bei dem ich XML einsetze und bin mir sicher das dies nicht der erste Fehler sein wird, der mir passiert.

Ich weiß natürlich nicht was Sinn der Sache ist (irgendwie etwas schwer zu begreifen) und was du dann mit der Xml anstellen willst um konkret weitere Vorschläge zu machen.

Ich versuche das mal zu beschreiben...
Ich habe ca. 20 Textfiles, die mir täglich zur Verfügung gestellt werden. Die Informationen in diesen Dateien muss ich in eine Datenbank importieren. Da die Formatierung dieser Dateien nicht wirklich ideal für einen Import sind, muss ich sie zuerst ein bisschen aufbereiten (z.B. wäre es recht gut ein CSV-File daraus zu generieren)
Die XML-Datei (config.xml) soll mir helfen flexibel zu beiben. Es kann ja sein das irgendwann eine neue Datei, die verarbeitet werden muss, hinzukommt.

Ich bin für deine Hilfe wirklich sehr dankbar und werde morgen deinen Lösungsvorschlag ausprobieren.

Wenn du Quellen hast, die mir beim "verstehen" und verarbeiten von XML helfen, bin ich natürlich sehr dankbar wenn du mir diese sagst

Gruß Badenzer
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: XML Node aus Variable 
Autor: ModeratorDaveS (Moderator)
Datum: 10.09.10 09:45

Der Ansatz ist natürlich sinnvoll. Wie du mit XmlDocument und XPath die Werte für eine bestimmte Datei bekommst (mit meiner vorgeschlagenen Xml) habe ich schon gezeigt. Aber hier nochmal
    Dim xmlFile As String = "D:\Test\xmlFile.xml"
    Dim fileName As String = "PACK.TXT"
    Dim xd As New XmlDocument
    xd.Load(xmlFile)
 
    For Each fn As XmlNode In xd.SelectNodes("files/file[@name='" & fileName & _
      "']/field")
        Debug.WriteLine(String.Format("Name={0}, start={1}, length={2}", _
        fn.Attributes("name").Value, fn.Attributes("start").Value, _
        fn.Attributes("length").Value))
    Next
Und um deine ursprüngliche Frage zu beantworten, so kann man es mit XDocument machen (es gäbe viele Lösungen).
    Dim xdoc As XDocument = XDocument.Load(xmlFile)
 
    Dim fields = xdoc.<files>.<file>.Where(Function(x) x.Attribute("name") = _
      fileName).<field>
 
    (oder auch
    Dim fields = (From elem In xdoc.<files>.<file> Where elem.@name = _
      fileName).<field>
    )
 
    For Each field In fields
        Debug.WriteLine(String.Format("Name={0}, start={1}, length={2}", _
          field.Attribute("name").Value, field.Attribute("start").Value, _
          field.Attribute("length").Value))
    Next
Meine xml:
<?xml version="1.0" encoding="utf-8" ?> 
<files>
    <file name='PACK.TXT'>
        <field name='Object_key' start='2' length='10' />
        <field name='Msg' start='33' length='4' />
        <field name='Created_on' start='38' length='10' />
    </file>
    <file name='PACK1.TXT'>
        <field name='Object_key1' start='2' length='10' />
        <field name='Msg1' start='33' length='4' />
        <field name='Created_on1' start='38' length='10' />
    </file>
</files>

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel