以下のURLを参照してclassの値を撮ろうとしています。
http://www.atmarkit.co.jp/fdotnet/dotnettips/908classname/classname.html
http://www.atmarkit.co.jp/fdotnet/dotnettips/687nondispbrowser/nondispbrowser.html
例として取得しようとしているものは以下のurl
http://ejje.weblio.jp/content/solid
class=phoneticEjjeDesc>sάlɪd</span><span class=phoneticEjjeDc>(米国英語)</span>, <span
上記の米国英語のsάlɪdです。
ソースは以下のように書き換えました。
static void Main() {
省略
foreach (HtmlElement e in doc.GetElementsByTagName("className")) {
string c = e.GetAttribute("className");
string text = e.InnerText;
if (!string.IsNullOrEmpty(c)
&& !string.IsNullOrEmpty(text)) {
text = text.Replace("\r\n", ""); // 改行文字の削除
Console.WriteLine(c);
Console.WriteLine(text);
}
}
}
取れませんでした。デバックするとclassNameでは1つも対象がありませんでした。classにしても同じでした。registoryでwebbrowerのバージョンを11に指定しても同じでした。
実行環境はwindows 10です。
ここ、違います。SPAN タグを対象にします。
// foreach (HtmlElement e in doc.GetElementsByTagName("className")) { foreach (HtmlElement e in doc.GetElementsByTagName("SPAN")) {
対象を選ぶところも違います。
Null 判定だけじゃなくて、e.GetAttribute("className") で取得した値が "phoneticEjjeDesc" かどうかの判定も必要です。
早速返信ありがとうございます。
2017/04/06 13:09:51教えていただいたように書きましたが、取得できませんでした。どこが悪いかご教授いただけますか?
foreach (HtmlElement e in doc.GetElementsByTagName("class")) {
foreach (HtmlElement e2 in doc.GetElementsByTagName("SPAN")) {
string c = e.GetAttribute("class");
string text = e.InnerText;
if (!string.IsNullOrEmpty(c) && !string.IsNullOrEmpty(text) ) {
if (c == "phoneticEjjeDesc") {
text = text.Replace("\r\n", ""); // 改行文字の削除
Console.WriteLine(c);
Console.WriteLine(text);
}
}
}
}
こんな感じになるかなと。
doc.GetElementsByTagName("class") のループを無くして、クラス属性の取得を className にしました。
2017/04/06 13:20:15少なくとも、ループの内側に入るはずです。
クラス属性は "className" で取れると思います。