使用XPath从HTML解析文本时出错

时间:2013-07-04 21:11:39

标签: c# html xpath

我需要解析的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>

2 个答案:

答案 0 :(得分: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
    

答案 1 :(得分:0)

该页面似乎没有格式良好的HTML。 这对我有用:

ht.DocumentNode.SelectSingleNode(@"html/head/table[1]/tbody/tr/td[1]/td/div[2]/marquee").InnerText;