1

私は実際にいくつかの子タグを持つタグからテキストを取得しようとしています

<p><span>Child Text </span><span class="price">Child Text</span><br />
I need this text</p>

これは私が試していることです

HtmlElement menuElement = browser.Document.GetElementsByTagName("p");
String mytext = menuElement.InnerHtml;   //also tried innerText,OuterHtml,OuterText

更新: Htmlagilitypackを使用する必要があると思うので、今私の質問はhtmlagilitypacklibを使用してこれを行う方法です。これは初めてです。

ありがとう

4

3 に答える 3

2

正規表現の使用から Web スクレイピング ライブラリまで、これには多くのアプローチがあります。必要なものを xpath で正確に処理できる htmlagilitypack を使用することをお勧めします。参照と名前空間を HtmlAgilityPack に追加します。以下のコードで linq を使用しています (これには .net 3.5 以降が必要です)。

using HtmlAgilityPack;
using System.Linq;

// これらの参照が利用可能でなければなりません。

        private void Form1_Load(object sender, EventArgs e)
        {
            var rawData = "<p><span>Child Text </span><span class=\"price\">Child Text</span><br />I need this text</p>";
            var html = new HtmlAgilityPack.HtmlDocument();
            html.LoadHtml(rawData);
            html.DocumentNode.SelectNodes("//p/text()").ToList().ForEach(x=>MessageBox.Show(x.InnerHtml));
        }
于 2012-04-28T19:49:18.430 に答える
0

「このテキストが必要」を ID を持つスパン内に配置できれば、はるかに簡単です。その後、その ID の .innerHTML() を取得するだけです。マークアップを変更できない場合は、menuElement の .innerHTML() と "
" の後のコンテンツの文字列一致を取得できますが、それは非常に脆弱です。

于 2012-04-28T19:33:57.000 に答える
0

DocumentText をさまざまな部分に分割することで、テキストを取得できます。

string text = "<p><span>Child Text </span><span class="price">Child Text</span><br />I need this text</p>";
text = text.Split(new string{"<p><span>Child Text </span><span class="price">Child Text</span><br />"}, StringSplitOptions.None)[1];
// Splits the first part of the text, leaving us with "I need this text</p>"
// We can remove the last </p> many ways, but here I will show you one way.
text = text.Split(new string{"</p>"}, StringSplitOptions.None)[0];
// text now has the value of "I need this text"

お役に立てれば!

于 2012-04-28T21:00:51.387 に答える