2017-01-05 3 views
0

Visual Basicでコーディングされたアプリケーションでxmlファイルに保存されたデータを調べようとしています.wpfを使用してビルドします.net framework 4.0を使用してWindows 7で実行します。 多くの検索を行いました。このフォーラム(と他のもの)では、私は失われています。私は適切な文書を見つけることができませんでした。誰かが私にここで答えを与えることができることを願っています。 これは私のXMLスキーマです:私は日付でソートされた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> 

私が何をしたいのか、現在の日付がstartdatestopdateの間に含まれているため、特定のreferenceためchangeのリストを取得することです。

これまでのところ、私は参考文献としてchangeのリストを手に入れました。

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 

しかし、私はそれ以上は取得できません。

1今日(reference=ref and Now()>startdate and Now()<stopdate)の時点で関連する変更のみを取得するにはどうすればよいですか?

私の2番目の問題は、抽出されたデータをどのように調べるかです。 changeListはXmlNodeListです。このリストの変更ごとに属性値を取得するにはどうすればよいですか(numbercode、...など)。

このXmlNodeListをループする方法が必要ですが、見つけられません。

私が考えたことは、私のxml要素と同じ属性を含むvbクラスchangeを作成し、何らかの形で自分のXmlNodeListを `List(Of Change) 'に変換することでした。私はそれが正しく理解されれば、これが非直列化であるかもしれないと思う。

2抽出されたデータをナビゲートするにはどのような方法がありますか?

ありがとうございました。

+0

(https://msdn.microsoft.com/en-us/library/x6c1kb0s(V = vs.110を).aspxの)クラスを生成するために、デシリアライズデータを取得し、Linqを使用して、結果の「変更」リストから必要なオブジェクトを選択して並べ替えます。 – MrGadget

答えて

0

Mr.Gadgetは、スキーマを一連のクラスに変換するXsd.exeツールを指しています。その後、XMLをこのオブジェクト階層にデシリアライズし、必要なデータを作成します。 C:それはで見つけることができます私の現在のマシン上で

\プログラムファイル(x86の)\マイクロソフトのSDK \ WINDOWS \ v10.0A \ binに\ NETFX 4.6ツール\ x64の

あなたはそれを見つけることができるはずですあなたの上に

このリンク:https://msdn.microsoft.com/en-us/library/x6c1kb0s(v=vs.110).aspx この使用方法の理解に役立ちます。

0

ありがとうございました。私はXsdを探索する時間がかかりませんでした。自分でシリアル化可能なクラスを構築しました。私は時間があれば後者のためにそれを私の心の中に保ちます。

しかし、私はデシリアライゼーションとLinqを使用しました(私はそれについては知らなかった)。それは素晴らしい作品です。 Linqは本当に強力です。

私は[XSD]を使用してお勧めしたいのおかげ

関連する問題