1

値を保持するテーブルを含む html ファイル ソースがあり、作成したデータ グリッド ビューに各値を転送したいと考えています。例 :

<tr><td>32</td><td>jon</td><td>smith</td></tr>  

そして私のデータグリッドビューで私が欲しい:

age    firstName    lastName
32     jon          smith  

(私はすでに列見出しのあるグリッドを構築しています)など...

各 td の値を適切な場所に「釣り上げる」にはどうすればよいですか? tnx :)

4

4 に答える 4

2

堅牢なソリューション-解析による。htmlファイルを文字列に読み取り、次に文字ごとに別の文字列に読み取ります。読み取るときは>、タグ全体をread(、、、または)にする必要があります。どちら<tr>かを</tr>確認し、そうである場合はX = 0、Y++を設定します。それは、次にX ++、タグを読み取った後-クリアテキスト、繰り返し、読み取り、すでに読み取られたデータがある場合、このデータはデータグリッドの[X、Y]位置に配置する必要があるテキストです(初期化できます)解析後、列の数を知るために最大Xを見つけるだけです)...<td></td></tr></td><

..私はC#コード=Dに言うことを置くのに困難がないことを願っています

于 2013-02-18T15:53:06.747 に答える
1

これらの値はすでにある種のDataTableまたはDataSetにありますか?GridView自体がテーブルとしてレンダリングされるので、不必要に何かをしようとしていますか?

さて、あなたは質問を修正したようです。HTMLを解析して値を抽出できるHTMLAgilityパックと呼ばれるものがあります。自分では使用していませんが、HTMLテーブルが有効なHTMLである場合は、テーブルコードを文字列として解析する手間が省けます。

http://htmlagilitypack.codeplex.com/

于 2013-02-18T15:52:48.120 に答える
0

汚いバージョン。代わりにList<IList>、独自のデータソースを生成できます。不正な HTML に注意してください:

class Program {

    static Regex cell = new Regex("<td>(.+?)</td>", RegexOptions.IgnoreCase);
    static string htmlTable = "<tr><td>32</td><td>41</td></tr><tr><td>123123</td><td>123123123</td></tr>";

    static void Main(string[] args) {
        var table = new List<IList<string>>(); //list of lists, kind of data table

        foreach (var rowString in htmlTable.Split(new [] { "</tr>" }, StringSplitOptions.RemoveEmptyEntries)) //split into rows
            table.Add(GetRowValues(rowString)); //get and add row values
    }

    static IList<string> GetRowValues(string rowString) {
        return new List<string>(cell.Matches(rowString).Cast<Match>().Select(m => m.Groups[1].Value)); //extract cells values by regex
    }
}
于 2013-02-18T16:26:17.430 に答える
0

HTML が本当にシンプルで、行やセルに属性がなく、コンテンツに変な文字がない場合、正規表現は手っ取り早いソリューションです。

string html = "<table><tr><td>32</td><td>jon</td><td>smith</td></tr></table>";
string pattern = "<tr>(?:<td>(.*?)</td>)*?</tr>";
foreach (Match m in Regex.Matches(html, pattern, RegexOptions.IgnoreCase))
{
    // Add row
    var row = grid.AddRow();
    foreach (Capture c in m.Groups[1].Captures)
    {
        // Add cell
        var cell = row.AddCell();
        cell.Contents = c.Value;
    }
}

HTML がこれほど単純ではない可能性がある場合は、HTML Agility Pack を使用ください

string html = "<table><tr><td>32</td><td>jon</td><td>smith</td></tr></table>";
var table = new HtmlDocument();
table.LoadHtml(html);
foreach (var tr in table.DocumentNode.Descendants("tr"))
{
    // Add row
    var row = grid.AddRow();
    foreach (var td in tr.Descendants("td"))
    {
        var cell = row.AddCell();
        cell.Contents = td.InnerText;
    }
}

(ここで実際に行とセルを追加する方法を推測しました。うまくいけば、自分で修正できます。)

于 2013-02-18T16:26:42.687 に答える