2017-03-10 71 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

感謝您的反饋。很有幫助 –