2013-04-08 64 views
0

我有時間將xdocument數據綁定到gridview。我需要這個想法的幫助,我嘗試了各種方式來做同樣的事情,但都是徒勞的.....下面是xml字符串。解析xdocument並綁定到網格

<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#Windows應用程序一個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 
     }; 
+0

請將您的原始XML添加到問題中,而不是作爲註釋。作爲第一步請注意XML命名空間,你的查詢應該包括doc.Descendants(ns +「result」),其中XNamespace ns =「w3.org/2005/sparql-results#」; – 2013-04-08 18:10:26

+0

那麼我已經把原來的XML,但預覽已解析,任何人都可以請讓我知道,如果XML必須放在代碼/評論塊。 – Harry 2013-04-09 08:28:32

+0

最簡單的方法:複製+粘貼xml到編輯器,然後用鼠標選擇你的xml內容,然後點擊「代碼示例」按鈕「{}」 – 2013-04-09 08:40:16

回答

0

我有你在DataGrid,「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(); 

要小心關於以下內容:

如果任何「result」XElement缺少「EmpId」或「EmpName」屬性,則樣本將失敗。

Prescriber類需要真實屬性「公共字符串EmpId {get; set;}」簡單的字段將不起作用。

您必須調用.ToList()作爲最後一步,出於某種原因,IEnumerable < T>將不起作用。

是的,LinqToXML查詢稍微複雜一些,如果有時間的話可以查找MSDN。

+0

xeondev,感謝和appricate你的時間和幫助,這已經解決了我的問題。 – Harry 2013-04-09 13:14:09

+0

歡迎光臨:) – 2013-04-09 13:16:32