2016-11-20 32 views
0

ユーザー入力を次のXMLファイルの内容と比較する方法の例を示す人がいますか?私はしばらく探していたが、私が正しく理解している例は見つからない。XMLファイルを使用して情報を保存する方法VB

<?xml version="1.0" encoding="UTF-8" ?> 
<Users> 
    <User> 
     <id>1</id> 
     <firstName>Garry</firstName> 
     <userName>Domain\Garry</userName> 
     <hashedkey>Example1</hashedkey> 
    </User> 
    <User> 
     <id>2</id> 
     <firstName>Ben</firstName> 
     <userName>Domain\ben</userName> 
     <hashedkey>Example2</hashedkey> 
    </User> 
</Users> 

私が何をしたいの例は次のとおりです。

If txtFirstName.text = XML.FirstName AND txtHashedkey.text = XML.hashedkey then 
msgbox("Key matches" 
else 
msgbox("Key doesnt match" 
end if 

私は明らかにしながら、キーその特定のユーザのために一致していないが<id>2</id><id>1</id>試合で鍵を鍵を持っていることを確認する必要があり名前は<id>1</id>です。誰かが私にこれを行う方法の例を教えてもらえますか? doc.Rootは、ルートノード( "ユーザー")である

+0

を備えています。つまり、XMLはそのデータを保存するための間違った方法かもしれません - 誰でもファイルを編集してハッシュを別のものに置き換えることができます。 – Plutonix

+0

こんにちはPlutonix、私はXMLファイルを暗号化している、私は複雑さを避けるために言及しなかった。 – user3516240

+0

したがって、テキストファイルの暗号化と復号化、XMLの保存と解析の2つの問題があります。まだチュートリアルのサイトではありません。あなたが何かを試して、特定の問題に遭遇した場合、このサイトはあなたにもっと役立つでしょう。 –

答えて

1

使用LINQ to Xml

Dim givenFirstName As String = txtFirstName.Text 
Dim givenHashedKey As String = txtHashedkey.Text 

Dim doc As XDocument = XDocument.Load(pathToFile) 
Dim result As XElement = 
    doc.Root. 
     Elements("User"). 
     FirstOrDefault(Function(user) 
          return user.Element("firstName").Value.Equals(givenFirstName) AndAlso 
            user.Element("hashedkey").Value.Equals(givenHashedKey) 
         End Function) 


Elements("User")すべての "User" XMLノードのコレクションを返します。
FirstOrDefault(lambda...)は、「チェック」式を実行し、firstNamehashedkeyの両方が与えられた値と等しい最初の要素を返します。

編集:
あなたが一致する要素の数を必要とする場合は、同じ述語でCountメソッドを使用します。あなたがしようとした具体的な質問を提起したものを掲載場合は、あなたの質問がよりよく受信することになります。vb.net使用例下にのみこのチュートリアルサイトではありませんXml Axis Properties

Dim amountOfElements As Integer = 
    doc.Root.<User>.Count(Function(user) 
           return user.<firstName>.Value.Equals(givenFirstName) AndAlso 
            user.<hashedkey>.Value.Equals(givenHashedKey) 
          End Function) 
+0

ご協力いただきありがとうございます!それは動作するように見えますが、返された値の量を確認するためにIfステートメントに入れる方法がわかりません。 – user3516240

+0

ありがとうございます! – user3516240

+0

とXMLリテラル 'Dim matches = doc。 .Any(ファンクション(u)u。 .Value = "Ben" And alsoAlso。 .Value = "Example2") '。ユーザーがたくさんいる場合の小さな問題は、XMLファイル全体がメモリに読み込まれるということですが、そのたびにファイルの暗号化と復号化に比べて何も見えません。 – Slai

関連する問題