Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从html获取值_C#_Html_Nullreferenceexception - Fatal编程技术网

C# 从html获取值

C# 从html获取值,c#,html,nullreferenceexception,C#,Html,Nullreferenceexception,我对C#还相当陌生,我正试图从浏览器游戏中获得一个等级。这是我使用的代码,它带有一个错误 “对象引用未设置为对象的实例” 下面我将向您展示HTML代码: <div class="levelFrontTopArea"> <a style="text-decoration:none" href="/profile.php">7</a> </div> 您正在使用GetElementByID,但您的div没有ID。请尝试将HTML更改为: <

我对C#还相当陌生,我正试图从浏览器游戏中获得一个等级。这是我使用的代码,它带有一个错误

“对象引用未设置为对象的实例”

下面我将向您展示HTML代码:

<div class="levelFrontTopArea">
   <a style="text-decoration:none" href="/profile.php">7</a>
</div>

您正在使用GetElementByID,但您的div没有ID。请尝试将HTML更改为:

<div ID="levelFrontTopArea" class="levelFrontTopArea">
  <a style="text-decoration:none" href="/profile.php">7</a>
</div>

如果要按类获取元素,可以循环使用div标记

static IEnumerable<HtmlElement> ElementsByClass(HtmlDocument doc, string className)
{
  foreach (HtmlElement e in doc.All)
    if (e.GetAttribute("className") == className)
      yield return e;
}

我不能改变源代码,如果它只是阅读它,对吗?我不知道你的意思。你自己写的html吗?或者它是由某个东西生成的?那么我的解决方案将无法工作,除非您能够更改生成html的代码,使其具有ID。您可以使用GetElementsByCassName。只有GetElementByTagNameOK。我认为您还需要更改在GetElementsByTagName中输入的内容。使其成为GetElementsByTagName(“a”)无法对“System.Collections.Generic.IEnumerableOops”类型的表达式应用带[]的索引,只需在其上复制代码,就可以使用
FirstOrDefault
获取第一个元素,因为该方法返回IEnumerable,你也可以在foreach中使用它。当他得到一个
NullReference
异常时,这仅仅是因为他试图得到一个没有id的class元素。问题实际上是如何得到class元素。
static IEnumerable<HtmlElement> ElementsByClass(HtmlDocument doc, string className)
{
  foreach (HtmlElement e in doc.All)
    if (e.GetAttribute("className") == className)
      yield return e;
}
var elmnt = ElementsByClass(webBrowser1.Document, "levelFrontTopArea");
levellabel.Text = elmnt.FirstOrDefault().InnerText;