2016-11-20 46 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>1</id>比赛,而在<id>2</id>关键中的关键该名称在<id>1</id>之下。有人可以给我一个例子,说明如何做到这一点?

+0

这不是一个教程网站:你的问题将得到更好的接受,如果你发布你尝试和提出了一个具体的问题。也就是说,XML可能是保存这些数据的错误方式 - 任何人都可以编辑文件来替换其他内容。 – Plutonix

+0

嗨Plutonix,我正在加密XML文件,我没有提到,以避免复杂性。 – user3516240

+0

所以你有两个问题:加密和解密文本文件,保存和解析XML。仍然不是教程网站。如果您尝试过某些功能并遇到特定问题,则此网站将对您更有帮助。 –

回答

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) 

doc.Root是根节点( “用户”)。
Elements("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

非常感谢!使用XML文字的 – user3516240

+0

'Dim matches = doc。 。Any(Function(u)u。 .Value =“Ben”AndAlso u。 .Value =“Example2”)'。如果有很多用户存在一个小问题,那就是整个XML文件被加载到内存中,但与每次对文件进行加密和解密相比,这似乎没有任何意义。 – Slai