3

2 つの XML ソースからデータを取得する 2 つのループがあります。

ループ 1:

foreach (XmlNode nodes in node.ChildNodes)
            {
                if (nodes.Name == "DEFAULT")
                    defaults[count] = nodes.InnerText;
                if (nodes.Name == "TYPE"
                    types[count] = nodes.InnerText;
                if (nodes.Name == "COL_NAM"
                    names[count] = nodes.InnerText;

            }
            count++;

ループ 2:

foreach (XmlNode nodes in root.ChildNodes)
        {
            vals[i] = nodes.InnerText;
            cols[i] = nodes.Name;
            i++;
        }

どうにかして、このデータを 1 つの究極のオブジェクトに整理したいと考えています。オブジェクトには、名前、タイプ、値、デフォルトの 4 つの部分が必要です。基本的に、Loop1 のすべてをグループ化し、次に Loop2 のすべてをグループ化し、2 つのオブジェクトをまとめて、Loop1 の名前と Loop2 の列に一致する 1 つのオブジェクトを作成します。理想的には、ループ 2 のノードの数はループ 1 のノードの数よりも少なくすることができます。しかし、それが不可能な場合は、回避できます。

最終的なオブジェクトをよりよく理解するには:

object everything = {{names}, {types}, {values}, {defaults}};

名前は両方のループから取得され、オブジェクトの「キー」になります。タイプとデフォルトはループ 1 から取得され、値はループ 2 から取得されます。連結は Name/Col を使用して一致します。

PS: 2D String 配列を使用してこれを実行しようとしましたが、cols フィールドと name フィールドに一致する 2 つを結合しようとしたときに問題が発生しました。

4

3 に答える 3

0

あなたの説明のように聞こえますが、私はXElement\LINQを使用します。 http://codingsense.wordpress.com/2008/09/23/join-xml-using-linq/

..および/または..

xmlをC#オブジェクトにシリアル化/逆シリアル化 http://www.java2s.com/Code/CSharp/XML/XmlSerializationHelper.htm

于 2013-02-20T20:58:11.400 に答える