2017-03-10 36 views
0

我有一些HTML,我使用C#解析HTML敏捷性包 - 一个节点后抢文字

样本文本的下方,虽然这与不同的记录

<strong>Title</strong>: Mr<br> 
<strong>First name</strong>: Fake<br> 
<strong>Surname</strong>: Guy<br> 

重复约150次我试图让一个数组中的文本,这将是像

customerArray [0,0] = Title 
customerArray [0,1] = Mr 
customerArray [1,0] = First Name 
customerArray [1,1] = Fake 
customerArray [2,0] = Surname 
customerArray [2,1] = Guy 

我可以在阵列中的文本,但我只是遇到麻烦STRONG闭合片后的文字,直到BR标签然后findi纳克下一个较强的触杀

任何帮助,将不胜感激

回答

2

您可以使用XPath following-sibling::text()[1]获得直接位于每个strong后文本节点。下面是一个最小的,但完整的例子:

var raw = @"<div> 
<strong>Title</strong>: Mr<br> 
<strong>First name</strong>: Fake<br> 
<strong>Surname</strong>: Guy<br> 
     </div>"; 
var doc = new HtmlDocument(); 
doc.LoadHtml(raw); 
foreach(HtmlNode node in doc.DocumentNode.SelectNodes("//strong")) 
{ 
    var val = node.SelectSingleNode("following-sibling::text()[1]"); 
    Console.WriteLine(node.InnerText + ", " + val.InnerText); 
} 

dotnetfiddle demo

输出:

Title, : Mr 
First name, : Fake 
Surname, : Guy 

您应该能够删除 “:” 通过做简单的字符串操作,如果需要...

+0

你知道你是我的英雄吗? –

1

<strong>是一个通用标记,因此您提供的示例格式特定于某些内容。

var html = @" 
<div> 
<strong>First name</strong><em>italic</em>: Fake<br> 
<strong>Bold</strong> <a href='#'>hyperlink</a><br>. 
<strong>bold</strong> 
<strong>bold</strong> <br> 
text 
</div> 

<div> 
<strong>Title</strong>: Mr<BR> 
<strong>First name</strong>: Fake<br> 
<strong>Surname</strong>: Guy<br> 
</div>"; 

var document = new HtmlDocument(); 
document.LoadHtml(html); 
// 1. <strong> 
var strong = document.DocumentNode.SelectNodes("//strong"); 
if (strong != null) 
{ 
    foreach (var node in strong.Where(
     // 2. followed by non-empty text node 
     x => x.NextSibling is HtmlTextNode 
     && !string.IsNullOrEmpty(x.NextSibling.InnerText.Trim()) 
     // 3. followed by <br> 
     && x.NextSibling.NextSibling is HtmlNode 
     && x.NextSibling.NextSibling.Name.ToLower() == "br")) 
    { 
     Console.WriteLine("{0} {1}", node.InnerText, node.NextSibling.InnerText); 
    } 
} 
+0

感谢您的反馈。很有帮助 –