0

我有时间将 xdocument 数据绑定到 gridview。我在这个想法上需要帮助,我尝试了各种方法来做同样的事情,但都是徒劳的.....下面是 xml 字符串。

    <sparql xmlns="http://www.w3.org/2005/sparql-results#"> 
    <head>  
    <variable name="EmpId" />    <variable name="EmpName" />    </head>
    <results> 
    <result> <binding name="EmpId">  
    <uri>http://www.brightstardb.com/categories/1</uri>    </binding>
    <binding name="EmpName">  
    <uri>http://www.brightstardb.com/categories/Smith</uri>    </binding> 
    </result> <result> </results> </sparql>

我需要将此绑定到 dotnet c# win 应用程序中的 gridview,下面是我采用但无法成功绑定的一种方法......请帮助。

 var result = XDocument.Load(client.ExecuteQuery(storeName, query));
var doc = XDocument.Parse(result.ToString());
IEnumerable<Prescriber> products = from x in doc.Descendants("result")
     select new Prescriber()
      {
               EmpId= x.Element("EmpId").Value,
               EmpName= x.Element("EmpName").Value
       };
4

1 回答 1

0

我有一个想法,你想要数据网格中的两列,“EmpId”和“EmpName”。使用给定的 XML,我希望有一行,第一列是 =“ http://www.brightstardb.com/categories/1 ”,第二列是 = “ http://www.brightstardb.com/categories/Smith

如果是真的,这里是一个示例代码:

    var doc = XDocument.Load("XMLFile1.xml");
    XNamespace ns = "http://www.w3.org/2005/sparql-results#";

    var products = from x in doc.Descendants(ns + "result")
                 select new Prescriber
                 {
                     EmpId = x.Elements(ns + "binding").Single(e => e.Attribute("name").Value == "EmpId").Element(ns + "uri").Value,
                     EmpName = x.Elements(ns + "binding").Single(e => e.Attribute("name").Value == "EmpName").Element(ns + "uri").Value
                 };

    datagridview.DataSource = products.ToList();

请注意以下事项:

如果任何“结果”XElement 缺少“EmpId”或“EmpName”属性,示例将失败。

Prescriber 类需要真实属性“public string EmpId { get; set; }”简单字段将不起作用。

您必须调用 .ToList() 作为最后一步,由于某种原因 IEnumerable< T > 不起作用。

是的,LinqToXML 查询要复杂一些,如果您有时间,请查找 MSDN。

于 2013-04-09T12:33:09.370 回答