0

私はテーブルのhtmlファイルにデータを持っています:

<table>
    <tr><td>001</td><td>MC Hammer</td><td>Can't Touch This</td></tr>
    <tr><td>002</td><td>Tone Loc</td><td>Funky Cold Medina</td></tr>
    <tr><td>003</td><td>Funkdoobiest</td><td>Bow Wow Wow</td></tr>
</table>

単一の行を配列またはリストに分割するにはどうすればよいですか?

string row = streamReader.ReadLine();

List<string> data = row.Split //... how do I do this bit?

string artist = data[1];
4

4 に答える 4

4

簡単な答え:正規表現を使用して、実際のHTMLを解析しようとしないでください。それはおそらくあなたを悩ませるために戻ってくるでしょう。

より長い答え:解析しているHTMLが指定された構造に適合することを絶対的に確実に保証できる限り、Jenniが提案したようにstring.Split()を使用できます。

string html = "<tr><td>001</td><td>MC Hammer</td><td>Can't Touch This</td></tr>";

string[] values = html.Split(new string[] { "<tr>","</tr>","<td>","</td>" }, StringSplitOptions.RemoveEmptyEntries);

List<string> list = new List<string>(values);

タグを個別にリストすると、これが少し読みやすくなり、.RemoveEmptyEntries隣接する終了タグと開始タグの間に空の文字列がリストに表示されなくなります。

このHTMLが実際のものである場合、または変更される可能性のあるツールからのものである場合、つまり、これが1回限りのトランザクションではない場合は、代わりにHTMLAgilityPackなどを使用することを強くお勧めします。統合は非常に簡単で、Intarwebsには多くの例があります。

于 2010-08-04T15:46:13.757 に答える
3

HTMLが整形式の場合は、LINQtoXMLを使用できます。

string input = @"<table>
    <tr><td>001</td><td>MC Hammer</td><td>Can't Touch This</td></tr>
    <tr><td>002</td><td>Tone Loc</td><td>Funky Cold Medina</td></tr>
    <tr><td>003</td><td>Funkdoobiest</td><td>Bow Wow Wow</td></tr>
</table>";

var xml = XElement.Parse(input);

// query each row
foreach (var row in xml.Elements("tr"))
{
    foreach (var item in row.Elements("td"))
    {
        Console.WriteLine(item.Value);
    }
    Console.WriteLine();
}

// if you really need a string array...
var query = xml.Elements("tr")
               .Select(row => row.Elements("td")
                                 .Select(item => item.Value)
                                 .ToArray());

foreach (var item in query)
{
    // foreach over item content
    // or access via item[0...n]
}
于 2010-08-04T16:11:12.057 に答える
2

HTMLを解析するとき、私は通常HTMLAgilityPackに目を向けます。

于 2010-08-04T15:38:44.817 に答える
2

あなたは試すことができます:

Row.Split /<tr><td>|<\/td><td>|<\/td><\/tr>/

しかし、それはHTMLがどれほど規則的であるかに依存します。それはプログラムで生成されたものですか、それとも人間が書いたものですか?正規表現は、常に同じ方法で生成されることが確実な場合にのみ使用する必要があります。それ以外の場合は、適切なHTMLパーサーを使用する必要があります。

于 2010-08-04T15:39:23.927 に答える