0

xdocument データをグリッドビューにバインドするのに苦労しています。この考えについて助けが必要です。同じことをするためにさまざまな方法を試しましたが、すべて無駄でした.....以下は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 にバインドする必要があります。以下は、私が取ったアプローチの 1 つですが、バインドに成功しませんでした.......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
       };
4

1 に答える 1

0

データグリッドに "EmpId" と "EmpName" の 2 つの列が必要だと思います。指定された XML では、1 行が必要でした。最初の列は = " http://www.brightstardb.com/categories/1 " で、2 番目の列は = " 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 に答える