【问题标题】:accessing special element in xml using linq [duplicate]使用linq访问xml中的特殊元素[重复]
【发布时间】:2014-09-19 09:55:33
【问题描述】:

如何使用 linq 获取指定用户名的密码值? 例如,如果用户名等于 AAAA,则密码为 ss。

<?xml version="1.0" encoding="utf-8"?> 
<User>
    <Username>AAAA</Username>
    <Password>ss</Password> 
</User>
<User> 
    <Username>CCC</Username> 
    <Password>zzz</Password> 
</User> 

【问题讨论】:

  • 这不是一个有效的 xml,因为它没有根元素
  • 请向我们展示您为解决此任务所做的努力。 Stack Overflow 不是一个“如何做”的网站。无论如何,像你这样的问题很多。查看右侧的“相关”面板。

标签: c# linq


【解决方案1】:

首先我会说您应该将您的 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>

那你可以试试:

var username = "AAAA";
var password = XElement.Parse(xml)
    .Elements("User")
    .Where(x=>(string)x.Element("Username") == username)
    .Select(x=>(string)x.Element("Password"));

我倾向于使用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();

【讨论】:

  • 是的,对不起,我的结构和你编辑的一样)
  • var xdoc = XDocument.Parse(xml); xml 应该是 xml 文件的名称?例如Users.xml?
  • xml 在我的示例中是一个字符串。如果您希望 xml 成为文件,请改用 XDocument.Load
  • 是的,但是密码没有得到值(当我调试时它存储了大量数据
  • 按照我的编辑尝试.FirstOrDefault()。如果没有找到匹配项,这将获得第一次出现或 null。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
  • 2023-01-26
  • 2015-02-23
相关资源
最近更新 更多