C# 从id属性c获取xml节点值
我有一个登录页面,用户从下拉列表中选择自己的名字,然后在文本框中输入自己的id代码。然后该页面重定向到显示用户信息的帐户页面。正在加载下拉列表和文本框,并对照xml文件进行检查,下面是一个示例C# 从id属性c获取xml节点值,c#,xml,linq,linq-to-xml,asp.net-4.5,C#,Xml,Linq,Linq To Xml,Asp.net 4.5,我有一个登录页面,用户从下拉列表中选择自己的名字,然后在文本框中输入自己的id代码。然后该页面重定向到显示用户信息的帐户页面。正在加载下拉列表和文本框,并对照xml文件进行检查,下面是一个示例 <staff> <idcode>0200</idcode> <Name id="0200">Doe, John</Name> </staff> inputPassword是上一页中正确加载的ID代码 我是缺少了一些简单的东西,还是更
<staff>
<idcode>0200</idcode>
<Name id="0200">Doe, John</Name>
</staff>
inputPassword是上一页中正确加载的ID代码
我是缺少了一些简单的东西,还是更容易重新构造xml,使Name节点成为idcode节点的子节点?
谢谢。LINQ查询返回迭代器,要解决它,您需要添加另一个方法调用,如Single或ToList。尝试在通话结束时添加一个单音
XDocument xdoc = XDocument.Load(Server.MapPath("Staff.xml"));
var result = xdoc.Descendants("Staff").Elements("Name").Where(n => n.Attribute("id").Value == inputPassword).Single();
nameLabel.Text = result.ToString();
如果您想获得ID代码,还可以使用SingleOrDefault来避免NRE,我会尝试以下方法:
XDocument xdoc = XDocument.Load(Server.MapPath("Staff.xml"));
var result = xdoc.Descendants("Staff").Elements("idcode").Where(n => n.Value.ToString() == inputPassword).SingleOrDefault();
nameLabel.Text = result.ToString();
若需要根据给定的id选择名称,那个么还需要两件事—从结果中只选择一个元素,并获取该名称元素的值:
string name = xdoc.Descendants("Staff")
.Elements("Name")
.Where(n => (string)n.Attribute("id") == inputPassword)
.Select(n => (string)n) // get element's value
.FirstOrDefault(); // select only first value, if any
或者使用XPath
string xpath = String.Format("//Staff/Name[@id='{0}']", inputPassword);
string name = (string)xdoc.XPathSelectElement(xpath);
string xpath = String.Format("//Staff/Name[@id='{0}']", inputPassword);
string name = (string)xdoc.XPathSelectElement(xpath);