2013-05-10 30 views
0

HTML代碼來了:使用HTMLAgilityPack提取文本,這是不標記之間和之後的特定節點

<b> CAR </b> 
    <br></br> 
    Car is something you can drive. 
    <br></br> 
    <br></br> 

C#代碼:

 HtmlAgilityPack.HtmlDocument doc = new HtmlWeb().Load("http://website.com/x.html"); 

     if (doc != null) 
     { 
      HtmlNode link = doc.DocumentNode.SelectSingleNode("//b[contains(text(), 'CAR')]"); 

      webBrowser1.DocumentText = link.InnerText; 
      webBrowser1.AllowNavigation = true; 

      webBrowser1.ScriptErrorsSuppressed = true; 
      webBrowser1.Visible = true; 
     } 

我設法得到: CAR

我需要得到:
汽車
汽車是你可以開車的東西。

有什麼建議嗎? 我嘗試添加下一個節點,但它給了NullReferenceExceptions: 「// b [contains(text(),'CAR')/ br]」和「// b [contains(text(),'CAR') 「

在此先感謝。 PS.I想避免使用正則表達式..

回答

0

XPATH區分大小寫(請參閱此處瞭解更多信息:Is it possible to ignore case using xpath and c#?)再加上包含'Car'的第二個短語不是孩子的B元素。你可以有它的工作是這樣的:

HtmlDocument doc = new HtmlWeb().Load("http://website.com/x.html"); 
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//text()[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'car')]")) 
{ 
    Console.WriteLine(node.InnerText); 
} 

在一個控制檯應用程序,它會輸出這樣的:

CAR 

    Car is something you can drive. 
+0

謝謝西蒙。如果描述不包含「car」這個詞,那麼問題就在於此。如果描述了會怎麼樣。 「四輪的事情」。我已經使用/ following :: text()[1]解決了這個問題,所以代碼在節點之後抓取CAR和文本。 HtmlNode link = doc.DocumentNode.SelectSingleNode(「.// b [contains(text(),'CAR')]/following :: text()[1]」); – GiedriusK 2013-05-10 15:00:57

相關問題