C# 使用linq访问xml中的特殊元素
如何使用linq获取指定用户名的密码值? 例如,如果Username等于AAAA,那么passswark就是ssC# 使用linq访问xml中的特殊元素,c#,linq,C#,Linq,如何使用linq获取指定用户名的密码值? 例如,如果Username等于AAAA,那么passswark就是ss <?xml version="1.0" encoding="utf-8"?> <User> <Username>AAAA</Username> <Password>ss</Password> </User> <User> <Username>CCC
<?xml version="1.0" encoding="utf-8"?>
<User>
<Username>AAAA</Username>
<Password>ss</Password>
</User>
<User>
<Username>CCC</Username>
<Password>zzz</Password>
</User>
AAAA
党卫军
CCC
zzz
我首先说,您应该将xml结构更改为以下内容:
<?xml version="1.0" encoding="utf-8"?>
<users>
<User>
<Username>AAAA</Username>
<Password>ss</Password>
</User>
<User>
<Username>CCC</Username>
<Password>zzz</Password>
</User>
</users>
我倾向于使用XElement
,但有些人会说XDocument
更好:
var xdoc = XDocument.Parse(xml);
var username = "AAAA";
var password = xdoc.Root.Elements("User")
.Where(x=>(string)x.Element("Username") == username)
.Select(x=>(string)x.Element("Password"))
.FirstOrDefault();
这不是有效的xml,因为它没有根元素。请告诉我们您为解决此任务所做的努力。堆栈溢出不是一个“如何做到这一点”的网站。不管怎样,像你这样的问题很多。请看一下右边的“相关”面板。是的,对不起,我的结构与您编辑的一样)var xdoc=XDocument.Parse(xml);xml应该是xml文件的名称吗?示例Users.xml?在我的示例中,xml是一个字符串。如果希望xml成为文件,请使用
XDocument.Load
代替。是的,但密码没有得到值(当我调试它时,它存储了大量数据)。请按照我的编辑尝试。FirstOrDefault()
。如果找不到匹配项,则会得到第一个匹配项或null。
var xdoc = XDocument.Parse(xml);
var username = "AAAA";
var password = xdoc.Root.Elements("User")
.Where(x=>(string)x.Element("Username") == username)
.Select(x=>(string)x.Element("Password"))
.FirstOrDefault();