Ich versuche, durch Daten in einer XML-Datei in einer Anwendung mit Visual Basic, Build mit wpf, auf Windows 7 mit .net Framework 4.0 Ich habe viele Posts durchsucht auf diesem Forum (und anderen), aber ich bin verloren. Ich konnte keine richtige Dokumentation finden. Ich hoffe, dass mir jemand eine Antwort geben kann. Das ist mein XML-Schema:Wie kann ich XML-Daten nach Datum sortiert durchlaufen und eine Liste einer benutzerdefinierten Klasse abrufen?
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Changes">
<xs:complexType>
<xs:sequence>
<xs:element ref="change" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="change">
<xs:complexType>
<xs:sequence>
<xs:element name="engine" type="xs:string"/>
<xs:element name="reference" type="xs:string"/>
<xs:element name="code" type="xs:string"/>
<xs:element name="number" type="xs:integer"/>
<xs:element name="startdate" type="xs:date"/>
<xs:element name="stopdate" type="xs:date"/>
<xs:element name="location" type="xs:string"/>
<xs:element name="carracteristic" type="xs:string"/>
<xs:element name="tolmin" type="xs:string"/>
<xs:element name="tolmax" type="xs:string"/>
<xs:element name="correctiveaction" type="xs:string"/>
<xs:element name="correctiveactiondeadline" type="xs:date"/>
<xs:element name="duplicate" type="xs:boolean"/>
<xs:element name="type" type="xs:string"/>
<xs:element name="justification " type="xs:boolean"/>
<xs:element name="status" type="xs:string"/>
<xs:element name="nature" type="xs:string"/>
<xs:element name="ongoingactions" type="xs:string"/>
<xs:element name="actor" type="xs:string"/>
<xs:element name="timelimit" type="xs:string"/>
<xs:element name="justif" type="xs:string"/>
<xs:element name="newstatus" type="xs:string"/>
<xs:element name="linktomap" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Was ich tun möchte, ist, eine Liste von change
für ein bestimmtes reference
zu erhalten, für das das aktuelle Datum zwischen den startdate
und den stopdate
besteht.
Bis jetzt habe ich es geschafft, eine Liste von 10 für meine Referenz zu bekommen.
Function applicableChanges(ByVal ref As String, ByVal changesfilepath As String) As List(Of change)
Dim xmlchange As New XmlDocument
xmlchange.Load(changesfilepath)
Dim changeList As XmlNodeList
changeList = root.SelectNodes("change[reference='" & ref & "']")
End function
Aber ich kann nicht weiter kommen.
1 Wie kann ich nur die Änderungen erhalten, die heute relevant sind (reference=ref and Now()>startdate and Now()<stopdate
)?
Mein zweites Problem ist dann, wie man durch die extrahierten Daten geht. changeList
ist eine XmlNodeList. Wie kann ich Attributwerte für jede Änderung in dieser Liste erhalten (wie number
, code
, ...).
Es muss eine Möglichkeit geben, diese XmlNodeList durchzulaufen, aber ich kann sie nicht finden.
Oder was ich dachte, könnte eine gute Idee sein, war eine VB-Klasse zu erstellen, die die gleichen Attribute wie meine XML-Elemente enthalten und irgendwie meine XmlNodeList in einer `List (Of change) konvertieren. Ich denke, das könnte Deserialisierung sein, wenn ich es richtig verstehe.
2 Was ist der beste Weg, um durch die extrahierten Daten zu navigieren, und wie?
Danke 'im Voraus für jede Hilfe.
Ich würde vorschlagen, mit [XSD] (https://msdn.microsoft.com/en-us/library/x6c1kb0s (v = vs.110) .aspx) eine Klasse, deserialize zu erzeugen die Daten und verwenden Sie Linq, um die gewünschten Objekte aus der resultierenden Liste von 'change' auszuwählen und zu ordnen. – MrGadget