0

我需要解析的 HTML 内容是 marquee 元素中的文本,如下所示。我正在使用带有 HTML Agility Pack 的 C# 来解析它,但是抛出了一个 nullrefrence 异常。

C#代码是

var ht1 = ht.DocumentNode.SelectSingleNode("html/body/table/tbody/tr/td[2]/div[2]/marquee/text()").InnerText; 

HTML的一部分:

<html>
   -<body ...
      -<table id=..
         -<tbody>
           -<tr>
             +<td.........
             -<td
               +<div ......
               -<div style="width:100%;padding:0;margin:0;border
                -style:solid;border-width:0;border-color:darkred;">
                  <marquee width="100%" height="20" bgcolor="" style="color:
                  darkorchid; font-size: 14" loop="3" behavior="scroll" 
                  scrolldelay="90 scrollamount="5" align="middle" border="0">
                   your scrolling text - these are some samples - think  of
                   possibilities</marquee>
                  <div>
4

2 回答 2

0
  1. 您是否查看了 html 文件的直接来源?如果您只查看在 Firebug/fox 之类的浏览器中显示的 html,它会显示额外的 tbody 标签,这些标签实际上并不在文件中。
    因此使用:

    var ht1 = ht.DocumentNode.SelectSingleNode("html/body/table/tr/td[2]/div[2]/marquee/text()").InnerText; 
    
  2. 您通常不想使用 text(),因为节点的文本内容已经是它的文本。并且 text() 返回一组文本节点,而不是连接的文本。
    因此使用:

    var ht1 = ht.DocumentNode.SelectSingleNode("html/body/table/tr/td[2]/div[2]/marquee").InnerText
    
于 2013-07-04T21:57:36.707 回答
0

该页面似乎不是格式良好的 HTML。不过,这对我有用:

ht.DocumentNode.SelectSingleNode(@"html/head/table[1]/tbody/tr/td[1]/td/div[2]/marquee").InnerText;
于 2013-07-05T02:32:31.007 回答