C# 无法使用html agility pack获取特定div的内容

C# 无法使用html agility pack获取特定div的内容,c#,regex,html-agility-pack,C#,Regex,Html Agility Pack,我正在使用html敏捷包从网站获取一些数据,现在有点问题。我想从这个部门得到一些数据: <div class="container middle"> <div class="details clearfix"> <dl> <dt>Gara</dt> <dd><a href="/national/china-pr/csl/2016/regular-season/r34227/">Super Le

我正在使用html敏捷包从网站获取一些数据,现在有点问题。我想从这个部门得到一些数据:

<div class="container middle">
<div class="details clearfix">
  <dl>
    <dt>Gara</dt>
    <dd><a href="/national/china-pr/csl/2016/regular-season/r34227/">Super League</a></dd>

    <dt>Data</dt>
    <dd><a href="/matches/2016/07/02/"><span class='timestamp' data-value='1467459300' data-format='d mmmm yyyy'>2 luglio 2016</span></a></dd>

    <dt>Game week</dt>
    <dd>15</dd>

    <dt>calcio di inizio</dt>
    <dd>
      <span class='timestamp' data-value='1467459300' data-format='HH:MM'>13:35</span>
      (<span class="game-minute">FP'</span>)
    </dd>
  </dl>
</div>
这会返回错误的结果,特别是:

<div class="container middle">
<h3 class="thick scoretime score-orange">
  0 - 0
</h3>

0 - 0


这是完整的代码。

好吧,对于这个特定的网页,您可以执行以下操作:

        var matchDetails = infoDiv.SelectNodes(".//div[@class='container middle']");
        Console.WriteLine(matchDetails[1].InnerHtml);
并通过
matchDetails[1]
使用
HtmlNode
。要检索其他数据,可以使用类似的
xpath
请求,如:

    var infoDiv = doc.DocumentNode.SelectSingleNode("//div[@class='block_match_info real-content clearfix ']");
    var matchDetails = infoDiv.SelectNodes(".//div[@class='container middle']");
    var dl = matchDetails[1].SelectSingleNode(".//dl");
    var dt = dl.SelectNodes(".//dt");
    var dd = dl.SelectNodes(".//dd");
    for (int i = 0; i < dt.Count; i++) {
        var name = dt[i].InnerHtml;
        var value = dd[i].InnerHtml;
        Console.WriteLine(name + ": " + value);
    }
var infoDiv=doc.DocumentNode.SelectSingleNode(“//div[@class='block\u match\u info real content clearfix']”);
var matchDetails=infoDiv.SelectNodes(“.//div[@class='container middle']”);
var dl=matchDetails[1]。选择SingleNode(“.//dl”);
var dt=dl.SelectNodes(“../dt”);
var dd=dl.SelectNodes(“.//dd”);
对于(int i=0;i

当然,您需要检查
NullReference
和其他内容对于这个特定的网页,您可以执行以下操作:

        var matchDetails = infoDiv.SelectNodes(".//div[@class='container middle']");
        Console.WriteLine(matchDetails[1].InnerHtml);
并通过
matchDetails[1]
使用
HtmlNode
。要检索其他数据,可以使用类似的
xpath
请求,如:

    var infoDiv = doc.DocumentNode.SelectSingleNode("//div[@class='block_match_info real-content clearfix ']");
    var matchDetails = infoDiv.SelectNodes(".//div[@class='container middle']");
    var dl = matchDetails[1].SelectSingleNode(".//dl");
    var dt = dl.SelectNodes(".//dt");
    var dd = dl.SelectNodes(".//dd");
    for (int i = 0; i < dt.Count; i++) {
        var name = dt[i].InnerHtml;
        var value = dd[i].InnerHtml;
        Console.WriteLine(name + ": " + value);
    }
var infoDiv=doc.DocumentNode.SelectSingleNode(“//div[@class='block\u match\u info real content clearfix']”);
var matchDetails=infoDiv.SelectNodes(“.//div[@class='container middle']”);
var dl=matchDetails[1]。选择SingleNode(“.//dl”);
var dt=dl.SelectNodes(“../dt”);
var dd=dl.SelectNodes(“.//dd”);
对于(int i=0;i

当然,您需要检查
NullReference
和stuff

查询
div
以及类
详细信息clearfix
应返回目标
div
元素。但有一个关键的细节需要注意, 需要在
/
之前使用
使XPath相对于
infoDiv
引用的上下文元素,否则XPath将在根文档上下文上求值(好像它是在
doc.DocumentNode
上调用的,而不是在
infoDiv
上调用的):


使用class
details clearfix
查询
div
应返回目标
div
元素。但有一个关键的细节需要注意, 需要在
/
之前使用
使XPath相对于
infoDiv
引用的上下文元素,否则XPath将在根文档上下文上求值(好像它是在
doc.DocumentNode
上调用的,而不是在
infoDiv
上调用的):


你到底想要什么?的内部HTML?查看您的代码和完整的源代码,我会说,您得到的正是您想要的。等待我刚才看到有两个
。你想得到第二个
div
,对吗?@spirit,是的,我也对如何获得这个特定的内容感兴趣:
calcio di inizio 13:35(FP')
,你使用的
HtmlDocument
类是从哪个程序集中获得的<代码>系统.Windows.Forms
?确定。我来看看。你到底想要什么?的内部HTML?查看您的代码和完整的源代码,我会说,您得到的正是您想要的。等待我刚才看到有两个
。你想得到第二个
div
,对吗?@spirit,是的,我也对如何获得这个特定的内容感兴趣:
calcio di inizio 13:35(FP')
,你使用的
HtmlDocument
类是从哪个程序集中获得的<代码>系统.Windows.Forms
?确定。我来看看。是否可以选择容器中间的所有dt标记?是的,
var dt=dl.SelectNodes(“.//dt”)
这是所有
标记的选择是否可以选择容器中间的所有dt标记?是的,
var dt=dl.SelectNodes(“.//dt”)这是所有
标记的选择修复了我的答案,tnx。修复了我的答案,tnx。