Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从id属性c获取xml节点值_C#_Xml_Linq_Linq To Xml_Asp.net 4.5 - Fatal编程技术网

C# 从id属性c获取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代码 我是缺少了一些简单的东西,还是更

我有一个登录页面,用户从下拉列表中选择自己的名字,然后在文本框中输入自己的id代码。然后该页面重定向到显示用户信息的帐户页面。正在加载下拉列表和文本框,并对照xml文件进行检查,下面是一个示例

<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);