![](/img/trans.png)
[英]How to modify existing XML file with XmlDocument and XmlNode in C#
[英]Validating username and password with xml file in C# with WPF and XmlNode
我正在尝试使用 Xml 文件中保存的凭据验证用户名和密码。 但我只得到错误。 这是我在 C# 和 WPF 中的第一个项目。似乎我没有将我的变量放入 XmlNode 阅读器块中。 如何将所需的变量放入节点读取器块中,或者我的解析尝试中的错误在哪里?
namespace RAS_ERP
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Login_Click(object sender, RoutedEventArgs e)
{
string UName = TxtUsername.Text;
string PWord = TxtPassword.Text;
XmlDocument doc = new XmlDocument();
doc.Load("/Resources/config.xml");
XmlNode root = doc.DocumentElement;
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("cfg", "urn:config-schema");
XmlNodeList nodeList = root.SelectNodes(
"descendant::cfg:users[cfg:username = string 'UName']", nsmgr
);
foreach (XmlNode users in nodeList)
{ string username;
string password;
if (PWord == password && UName == username)
{
NavigationService service = NavigationService.GetNavigationService(this);
service.Navigate(new Uri("MainMenu.xaml", UriKind.RelativeOrAbsolute));
}
}
else
{
LblError.string = "Username or Password Incorrect !";
}
}
}
private void Username_TextChanged(object sender, TextChangedEventArgs e)
{
}
}
以及我想用来验证登录凭据的 XML:
<?xml version="1.0" encoding="utf-8" ?>
<config xmlns="urn:config-schema">
<login>
<users>
<username>
admin
</username>
<password>
admin
</password>
<firstname>
Asim
</firstname>
<lastname>
Shah
</lastname>
<permissions>
2707
</permissions>
</users>
</login>
</config>
来自 VS 2017 的错误列表:
Fehler CS0246 Der Typoder Namespacename "MainMenue" wurde nicht gefunden (möglicherweise fehlt eine using-Direktive oder ein Assemblyverweis)。 RAS-ERP C:\\Users\\ilove\\source\\repos\\RAS-ERP\\RAS-ERP\\MainWindow.xaml.cs 49 Aktiv
Fehler CS0246 Der Typoder Namespacename "MainMenue" wurde nicht gefunden (möglicherweise fehlt eine using-Direktive oder ein Assemblyverweis)。 RAS-ERP C:\\Users\\ilove\\source\\repos\\RAS-ERP\\RAS-ERP\\MainWindow.xaml.cs 49 Aktiv
Fehler CS1061 "Label" enthält keine Definition für "Text", und es wurde keine verfügbare Text-Erweiterungsmethode gefunden, die ein erstes Argument vom Typ "Label" akzeptiert (möglicherweise fehlt ehlt evero RAS-ERP C:\\Users\\ilove\\source\\repos\\RAS-ERP\\RAS-ERP\\MainWindow.xaml.cs 58 Aktiv
Fehler CS0165 Verwendung der nicht zugewiesenen lokalen 变量“用户名”。 RAS-ERP C:\\Users\\ilove\\source\\repos\\RAS-ERP\\RAS-ERP\\MainWindow.xaml.cs 51 Aktiv
Fehler CS0165 Verwendung der nicht zugewiesenen lokalen Variablen“密码”。 RAS-ERP C:\\Users\\ilove\\source\\repos\\RAS-ERP\\RAS-ERP\\MainWindow.xaml.cs 51 Aktiv
Fehler CS1513 } erwartet。 RAS-ERP C:\\Users\\ilove\\source\\repos\\RAS-ERP\\RAS-ERP\\MainWindow.xaml.cs 69 Aktiv
编辑为 MainMenu 问题通过更改为解决了:
foreach (XmlNode users in nodeList)
{ string username;
string password;
if (PWord == password && UName == username)
{
NavigationService service = NavigationService.GetNavigationService(this);
service.Navigate(new Uri("MainMenu.xaml", UriKind.RelativeOrAbsolute));
}
任何帮助,将不胜感激。
最终通过使用 XDocument Loader 和 Xelement 找到了解决方案。 需要使用 .ToString 方法将带有 xml 结果的变量转换为字符串,但我得到了我需要的结果:
using System;
using System.Xml;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Xml.Linq;
using System.Xml.XmlConfiguration;
namespace RAS_ERP
{
/// <summary>
/// Interaktionslogik für MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Login_Click(object sender, RoutedEventArgs e)
{
var UName = TxtUsername.Text;
var PWord = TxtPassword.Text;
XDocument config = XDocument.Load("../Resources/config.xml");
var query = from o in config.Root.Elements("user")
where (string)o.Element("username") == UName
select (string)o.Element("username").Value;
var query2 = from o in config.Root.Elements("user")
where (string)o.Element("username") == UName
select o.Element("password").Value;
var password = query2.ToString();
if ( PWord == password )
{
NavigationService service = NavigationService.GetNavigationService(this);
service.Navigate(new Uri("MainMenu.xaml", UriKind.RelativeOrAbsolute));
}
else
{
LblError.Content = "Username or Password Incorrect !";
}
}
private void Username_TextChanged(object sender, TextChangedEventArgs e)
{
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.