如何查看按日期排序的xml数据并获取自定义类的列表?

时间:2017-01-05 09:41:13

标签: xml vb.net

我正在尝试浏览存储在使用visual basic编码的应用程序中的xml文件中的数据,使用wpf构建,使用.net framework 4.0在Windows 7上运行 我搜索了很多,我在这个论坛(和其他人)上经历了很多帖子,但我迷路了。我无法找到合适的文档。我希望有人能在这里给我一个答案。 这是我的xml架构:

<?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>

我想要做的是获取特定change的{​​{1}}列表,其中referencestartdate之间包含当前日期。< / p>

到目前为止,我已经设法为我的参考文件获取了stopdate的列表。

change

但我无法进一步发展。

1如何才能获得与今天相关的更改(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 )?

我的第二个问题是如何浏览提取的数据。 reference=ref and Now()>startdate and Now()<stopdate是XmlNodeList。如何获取此列表中每项更改的属性值(例如changeListnumber,...)。

必须有一种循环遍历此XmlNodeList的方法,但我找不到它。

或者我认为可能是一个好主意,是创建一个vb类code,它包含与我的xml元素相同的属性,并以某种方式将我的XmlNodeList转换为`List(Of change)。如果我理解正确,我认为这可能是反序列化。

2浏览提取的数据的最佳方法是什么?以及如何?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

Mr.Gadget指的是将您的架构转换为一组类的Xsd.exe工具。然后,您可以将XML反序列化为此Object层次结构,并根据需要对数据进行任何使用。

在我当前的机器上,它可以在以下位置找到:C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 Tools \ x64

你应该可以在你的身上找到它。

此链接:https://msdn.microsoft.com/en-us/library/x6c1kb0s(v=vs.110).aspx 将帮助您了解如何使用它。

答案 1 :(得分:0)

感谢您的回答。我没有花时间去探索Xsd我自己构建了可序列化的类。如果我有时间的话,我会在后脑中记住这一点。

然而,我使用反序列化和Linq(我不知道它)。它很棒。 Linq非常强大。

由于