Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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# 在Asp.net c中过滤xml数据并将其绑定到gridview_C#_Asp.net_Xml_Linq - Fatal编程技术网

C# 在Asp.net c中过滤xml数据并将其绑定到gridview

C# 在Asp.net c中过滤xml数据并将其绑定到gridview,c#,asp.net,xml,linq,C#,Asp.net,Xml,Linq,我得到了一个web应用程序,其中包含一个用于存储用户数据的XML文件。我希望仅基于“txtEmpid.Text”在网格视图中为该特定用户显示输入的数据。我认为问题在于字符串读取器。但我似乎不知道是什么,因为我是asp.net新手,而这段代码给了我一个空白页。 谢谢你的帮助 我的XML文件: -<SkillSet> -<SkillSets> <Employee_ID>1</Employee_ID> <Employe

我得到了一个web应用程序,其中包含一个用于存储用户数据的XML文件。我希望仅基于“txtEmpid.Text”在网格视图中为该特定用户显示输入的数据。我认为问题在于字符串读取器。但我似乎不知道是什么,因为我是asp.net新手,而这段代码给了我一个空白页。 谢谢你的帮助

我的XML文件:

-<SkillSet>

    -<SkillSets>

    <Employee_ID>1</Employee_ID>

    <Employee_Name>abc</Employee_Name>

    <PL_Name>xyz</PL_Name>

    <Skill_Name1>C# with Asp.NET</Skill_Name1>

    <Skill_Type1>Programming</Skill_Type1>

    <Skill_Proficiency1>Beginner</Skill_Proficiency1>

    <Experience1>1</Experience1>

    <Skill_Name2>FL Studio</Skill_Name2>

    <Skill_Type2>Others</Skill_Type2>

    <Skill_Proficiency2>Intermediate</Skill_Proficiency2>

    <Experience2>2</Experience2>

    <Skill_Name3>ms word</Skill_Name3>

    <Skill_Type3>others</Skill_Type3>

    <Skill_Proficiency3>Advance</Skill_Proficiency3>

    <Experience3>3</Experience3>

    <Skill_Name4>Camtasia</Skill_Name4>

    <Skill_Type4>Others</Skill_Type4>

    <Skill_Proficiency4>Professional</Skill_Proficiency4>

    <Experience4>4</Experience4>

    <Skill_Name5>MS excel</Skill_Name5>

    <Skill_Type5>Programming</Skill_Type5>

    <Skill_Proficiency5>Beginner</Skill_Proficiency5>

    <Experience5>5</Experience5>

    <Comments>fgfdgdf</Comments>

    </SkillSets>

    </SkillSet>
试试这个:

    string filePath = "Complete path where you saved the XML file";     
    DataSet ds = new DataSet();
    ds.ReadXml(filePath);    
    var skillSets = ds.Tables[0].AsEnumerable();
    var query = from skillset in skillSets
                where skillset.Field<string>("Employee_ID") == "1" // here you can get value from text box etc.
                select skillset;
    grdxml.DataSource = query.ToList();
    grdxml.DataBind();

您的LINQ查询很好。代码中的问题如下:

StringReader theReader = new StringReader(result.ToString());
ds.ReadXml(theReader);
您使用的是result.ToString,而Xelement列表的ToString表示形式不能作为XML读取。事实上,调用ToString会导致这种情况

"System.Collections.Generic.List`1[System.Xml.Linq.XElement]"
正如您所看到的,这不是XML

要使代码正常工作,请尝试以下操作:

 try {

     var xmlStr = File.ReadAllText(Server.MapPath("~/SkillSet.xml"));
     var str = XElement.Parse(xmlStr);
     var result = str.Elements("SkillSets").
     Where(x => x.Element("Employee_ID").Value.Equals(txtEmpid.Text)).ToList();

     grdxml.DataSource = result.ToList();
     grdxml.DataBind();
 }  
 catch(Exception ex)
 {
    lblerror.Text = ex.ToString();
 }

另外,请删除XML上的斜杠

谢谢您的回复!但是,仅显示特定员工的记录的逻辑何在xml文件将包含数百名员工的记录,显示的记录应该是该特定员工的记录斜杠是什么意思?但事实上,它似乎不起作用。。但是,当我简单地调用xml文件中所有要绑定到网格的数据时,它就可以工作了。下面是代码:DataSet ds=new DataSet;ds.ReadXmlServer.MapPath~/Employees.xml;如果ds!=null&&ds.HasChanges{grdxml.DataSource=ds;grdxml.DataBind;}其他{grdxml.DataBind;}@panman斜杠是-在XML示例中有一些。注释中的第二个示例之所以有效,是因为传递给ReadXml的参数是有效的XML字符串。在您最初的示例中,它不起作用,因为您传递的参数是在无效XML字符串的列表上调用ToString的结果。您的第一个代码抛出一个异常。我给你的代码中没有问题。你有什么例外吗?
 try {

     var xmlStr = File.ReadAllText(Server.MapPath("~/SkillSet.xml"));
     var str = XElement.Parse(xmlStr);
     var result = str.Elements("SkillSets").
     Where(x => x.Element("Employee_ID").Value.Equals(txtEmpid.Text)).ToList();

     grdxml.DataSource = result.ToList();
     grdxml.DataBind();
 }  
 catch(Exception ex)
 {
    lblerror.Text = ex.ToString();
 }