2016-11-20 2 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

Hi 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...) выполнит наше выражение «проверка» и вернет первый элемент, где оба значения firstName и hashedkey равны заданным значениям.

Редактировать:
Если вам нужно количество совпадающих элементов, используйте метод 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. . . Любой (функция (u) u. .Value = "Ben" AndAlso u. .Value = "Example2") '. Небольшая проблема, если есть много пользователей, заключается в том, что весь XML-файл загружается в память, но это кажется ничем по сравнению с тем, чтобы шифровать и дешифровать файл каждый раз. – Slai

Смежные вопросы