2013-04-08 4 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> 

мне нужно, чтобы связать это с GridView в DotNet C Применение # выигрыша, ниже один подход, который я взял, но не смог добиться успеха, чтобы связать ....... Pls помощь.

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#»; –

+0

Ну, я поместил оригинальный XML, но просмотрел предварительный просмотр, который может кто угодно, пожалуйста, сообщите мне, должен ли xml помещать блок кода/комментария. – Harry

+0

Самый простой способ: скопировать + вставить xml в редактор, затем выбрать содержимое xml с помощью мыши и нажать кнопку «Пример кода» «{}« –

ответ

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

Будьте осторожны примерно следующее:

Образец не удастся, если отсутствует атрибут «EmpId» или «EmpName» для любого из «результатов» XElement.

Класс рецептора нуждается в реальных свойствах "public string EmpId {get; set;}" простое поле не будет работать.

Вы должны позвонить .ToList() как последний шаг, по какой-либо причине IEnumerable < T> не будет работать.

И да, запрос LinqToXML является немного более сложным и ищет MSDN, если у вас есть время.

+0

xeondev, Спасибо и подпишем ваше время и помогите, это решило мою проблему. – Harry

+0

Добро пожаловать на SO :) –

Смежные вопросы