所有我想要做的就是HtmlAgilityPack HasAttribute?
node.Attributes["class"].Value
但如果節點不具有class
屬性,它崩潰。所以,我必須先檢查它的存在,對嗎?我怎麼做? Attributes
不是一個字典(它是一個包含內部字典的列表??),並且沒有HasAttribute方法(只是一個HasAttributes,它指示它是否有任何屬性)。我該怎麼辦?
所有我想要做的就是HtmlAgilityPack HasAttribute?
node.Attributes["class"].Value
但如果節點不具有class
屬性,它崩潰。所以,我必須先檢查它的存在,對嗎?我怎麼做? Attributes
不是一個字典(它是一個包含內部字典的列表??),並且沒有HasAttribute方法(只是一個HasAttributes,它指示它是否有任何屬性)。我該怎麼辦?
試試這個:
String val;
if(node.Attributes["class"] != null)
{
val = node.Attributes["class"].Value;
}
,或者您可能能夠添加這個
public static class HtmlAgilityExtender
{
public static String ValueOrDefault(this HtmlAttribute attr)
{
return (attr != null) ? attr.Value : String.Empty;
}
}
然後用
node.Attributes["class"].ValueOrDefault();
我還沒有測試的那一個,但它應該工作。
不能在單行'if'聲明... – 2010-11-03 18:17:09
呵呵,謝謝你清醒聲明一個變量,所以我沒有:-) – 2010-11-03 18:18:49
希望,他們將實施類似 VAL = node.Attributes [「class」]。值「」;如果你只是不關心任何地方空... – Doggett 2010-11-03 18:24:25
請試試這個:
String abc = String.Empty;
if (tag.Attributes.Contains(@"type"))
{
abc = tag.Attributes[@"type"].Value;
}
該代碼可以用來獲得兩個腳本標記之間的所有文本。
String getURL(){
return @"some site address";
}
List<string> Internalscripts()
{
HtmlAgilityPack.HtmlDocument doc = new HtmlWeb().Load((@"" + getURL()));
//Getting All the JavaScript in List
HtmlNodeCollection javascripts = doc.DocumentNode.SelectNodes("//script");
List<string> scriptTags = new List<string>();
foreach (HtmlNode script in javascripts)
{
if(!script.Attributes.Contains(@"src"))
{
scriptTags.Add(script.InnerHtml);
}
}
return scriptTags;
}
你確定檢查node.Attributes [「class」]'不返回null嗎? – 2010-11-03 18:15:23
@Kirk:對,你是......認爲它由於某種原因拋出異常。好決定。 – mpen 2010-11-03 18:19:38