0

linq to xml を使用して、行とセルを含むテーブルを表す xml 構造を構築しようとしています。例:

<table>
    <tablerow>
        <cell></cell>
        <cell></cell>
        <cell></cell>
    </tablerow>
    <tablerow>
        <cell></cell>
        <cell></cell>
        <cell></cell>
        </tablerow>
</table>

最初の行はヘッダーとして機能し、2 番目の行にはフィールド値が含まれます。オブジェクト内で、名前から名前を引き出していますが、同じです

フィールド名を両方のテーブル行セルに追加して、出力が次のようになるようにする最善の方法を見つけようとしています。

<table>
    <tablerow>
        <cell>Field1</cell>
        <cell>Field2</cell>
        <cell>Field3</cell>
    </tablerow>
    <tablerow>
        <cell>Field1</cell>
        <cell>Field2</cell>
        <cell>Field3</cell>
    </tablerow>
</table>

現在、すべてのセル要素を取得しています

var cells = doc.Descendants(tablerow).Descendants(cell);

次に、foreach を使用して法線を使用して挿入します.add()

foreach (c in cells)
{
  c.add(//XElement content...);
}

私の質問は、3 つのフィールド (ただし 6 つのセル) しかない場合、それらを 6 つのセルに入力するための最良の方法は何かということです。セルを動的に生成するので、各行のフィールドごとに常に 1 つのセルが存在するように制御および確認できます。

提案やアイデアをいただければ幸いです

-乾杯

4

3 に答える 3

0

正しい方向に私を導いてくれた CSJ に感謝します。彼の答えは正しい答えですが、実装が少し異なっていたのでコードを共有したいと思いました。これは、コンソール アプリでモックアップした完全な動作サンプルです。- 乾杯

static void Main(string[] args)
        {
            XDocument xd = CreateXml();
            List<string> stuff = GeneratList();
            PopulateArray(stuff, xd);
        }

        private static XDocument PopulateArray(List<string>mylist, XDocument xmlFile)
        {
            var row = xmlFile.Descendants("tablerow");

            foreach (var r in row)
            {
                var i = 0;
                var cell = r.Descendants("cell");
                foreach (var c in cell)
                {
                    c.Add(new XText(mylist[i++]));
                }
            }
            return xmlFile;
        }

        private static XDocument CreateXml()
        {
            XDocument doc = new XDocument(
                new XElement("table",
                    new XElement("tablerow",
                        new XElement("cell"),
                        new XElement("cell"),
                        new XElement("cell")
                    ),
                new XElement("tablerow",
                        new XElement("cell"),
                        new XElement("cell"),
                        new XElement("cell")
                    )           
                )     
                );
            return doc;
        }

        private static List<string> GenerateList()
        {
            return new List<string> {
                "Orange",
                "Grape",
                "Banana"
            };
        }
于 2013-07-17T14:34:39.393 に答える