0

次のようなxmlがあります

<DataCollection>
  <Data>
    <Name>John</Name>
    <Age>30</Age>
  </Data>
  ... more person
</DataCollection>

Name、Age をフィールドとしてオブジェクト (または何らかのタイプ) コレクションを作成したいと考えています。私が持っている1つの問題は、クラスを作成するための構造を事前に知らないことです(私が知っているのは、DataCollectionとDataがあるということだけです)。次に、linqを使用してselect newを使用します。現在の実装では、各データの XML を調べ、要素を読み取り、カンマ区切りのリストを作成しています。

これを行うより良い方法はありますか?XML の目的は、データ グリッド内のデータの下にあるすべてのデータを表示することです。

4

3 に答える 3

3

FWIW は、その XML ドキュメントをオブジェクトのコレクションに変換する LINQ クエリです。

    var coll = from XElement c in doc.Descendants("Data") 
       select new { 
           Name = c.Element("Name").Value, 
           Age = int.Parse(c.Element("Age").Value) 
       };

しかし、あなたが本当に探しているのは、XML ドキュメントを DataGrid に直接バインドする方法だと思います。これを行う 1 つの方法は、DataGrid を DataTable にバインドし、その WriteXml/ReadXml メソッドを使用してファイルの読み取り/書き込みを行うことです。

プレビューでは ... 入力 XML の構造が不明であるという要件を見逃していました。この LINQ を使用すると、データ ブロックの構造を知らなくても、オブジェクトのコレクションのコレクションを構築できます。

var coll = from XElement c in loaded.Descendants("Data")
       select (from XElement d in c.Elements() select d.Value);

または、これを使用して CSV を生成できます。

string csv = string.Join(Environment.NewLine, 
( from XElement c in loaded.Descendants("Data") 
  select string.Join(",", 
    (from XElement d in c.Elements() select d.Value).ToArray())
).ToArray());
于 2009-06-02T18:58:15.607 に答える
1

あなたの質問を理解していただければ幸いです...とにかく-Linqについて言及したのでasp.netを使用すると仮定すると、辞書が最良の選択です。

詳細については、こちらを参照してください。http://msdn.microsoft.com/en-us/library/xfhwa508.aspx

一般に、ディクショナリはキーと値のペアを保持するため、コンマを使用する必要はなく、必要なようにループを使用できます。

それが役立つことを願っています!

于 2009-06-02T17:41:28.860 に答える
0

データが読み取り専用の場合、Xslt を使用して Html テーブルにフォーマットすることを検討しましたか?

これは、これをカバーするstackoverflowで見つけた記事です...

次に、の子要素が必要なすべてを変更できるように見えますが、それでもグリッド(htmlテーブル)にレンダリングされます...

于 2009-06-02T18:36:27.943 に答える