0

含まれているstringHTML があり、Windows 8 ストア アプリ内で解析する必要があります。System.Windows.Forms.HtmlDocumentは、ストア アプリでは使用できません。ページ リンク、画像リンク、テキスト コンテンツを抽出するだけです。

迅速で汚い解決策として正規表現を使用できると思いますが、もっと良い方法があるはずです。構文解析は堅牢で、HTML がわずかに壊れていたり標準的でない場合でも、文字列全体を拒否しないようにする必要があります。グーグルはいくつかの代替手段を提供しますが、結果は決定的ではなく、実際にこれを行った人からの直接的な回答(または回答のリスト)が必要です. いくつかのコードはいいでしょう、または良いコードでSOの答えへのリンクだけです。

明確化のためのいくつかのコード:

public async void doSomeHtmlStuff(string url) {
    System.Net.Http.HttpClient client = new HttpClient();
    string html = await client.GetStringAsync(url);

    // parse the html, how? 

    // NOT anything like this, document tree is needed for context
    var links = Regex.Matches(html, "<a\\s*href=.*>.*</a>");
}
4

1 に答える 1

1

アプリケーションのオーバーヘッドが増加しますが、可能であれば実際に HTML を にロードし、 ( docsWebView ) メソッドを介して DOM アクセスを使用して DOMにアクセスし、必要な検索を行うことをお勧めします。IE の HTML パーサーは寛容で、スローされたほぼすべての HTML を処理できます。InvokeScript

NavigateToString必要に応じて( docs ) を使用して HTML をロードできます。

私がこの手法を提案している理由は、HTML5 が (XHTML のように) 整形式である必要がないことを考えると、DOM の確実な解析を非常に困難にするさまざまな奇妙な状況に遭遇する可能性が高いからです。検索の一部として DOM の構造を保持する必要があります。

私 (または私が所属していたチーム) は、過去に C# 用にいくつかの DOM 解析ライブラリを使用しましたが、それらはすべて堅牢性に欠けていることがわかりました。解析する HTML のセットが非常に固定されている場合は、そのうちの 1 つが役立つことがあります。

Google が、C で書かれた純粋な HTML 5 パーサーである Gumbo ライブラリのリリースを発表したのはごく最近のことです (もちろん、これは役に立ちません)。

于 2013-09-02T16:57:37.697 に答える