【问题标题】:Parsing xdocument and binding to grid解析 xdocument 并绑定到网格
【发布时间】:2023-03-17 03:34:01
【问题描述】:

我有时间将 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
       };

【问题讨论】:

  • 请将您的原始 XML 添加到问题中,而不是作为评论。作为第一步,请注意 XML 命名空间,您的查询也应包括 doc.Descendants(ns+"result"),其中 XNamespace ns = "w3.org/2005/sparql-results#";
  • 好吧,我已经放了原始 XML,但是预览已经解析,如果 xml 必须放入代码/注释块,任何人都可以告诉我。
  • 最简单的方法:复制+粘贴xml到编辑器,然后用鼠标选择你的xml内容并点击“代码示例”按钮“{}”
  • 感谢 xeondev.......

标签: c# linq parsing linq-to-xml


【解决方案1】:

我知道您希望数据网格中有两列“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 不起作用。

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

【讨论】:

  • xeondev,感谢并感谢您的时间和帮助,这解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-24
相关资源
最近更新 更多