在Html标签之间查找文本

时间:2014-09-10 13:25:10

标签: c# regex

我正在处理HtmlDocument并希望在标记之间获取文本:

<span>Location:</span><br/>                                 
50 Airport Road<br/>
Ottawa, CA <br/><br/>
<span>Latitude / Longitude:</span><br/>
40.32083 / -71.67275<br/><br/>

我想要两件事:

  • 50机场路 加利福尼亚州渥太华
  • 45.32083 / -75.672775

如何做到这一点。 提前致谢。 我的英语不好请忽略。

1 个答案:

答案 0 :(得分:8)

使用包含DOM解析器的HTML Agility Pack - 永远不值得为HTML编写自己的解析器或RegExs。

http://www.nuget.org/packages/HtmlAgilityPack

在下面的示例中,您可以看到使用XPATH选择元素是多么容易。因为您想要的值实际上不在元素中,所以我使用text()来获取它们。

如果这是较大文档的一部分,您可以扩展XPATH以反映它们在更广泛的文档中的位置。

string html = @"<span>Location:</span><br/>                                 
    50 Airport Road<br/>
    Ottawa, CA <br/><br/>
    <span>Latitude / Longitude:</span><br/>
    40.32083 / -71.67275<br/><br/>";

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);

// Getting an element (Location:)
var latLongLabel = doc.DocumentNode.SelectSingleNode("span[2]");

// The location is split over two text nodes
var locationValA = doc.DocumentNode.SelectSingleNode("text()[1]").InnerHtml.Trim();
var locationValB = doc.DocumentNode.SelectSingleNode("text()[2]").InnerHtml.Trim();

// The lat long
var latLongVal = doc.DocumentNode.SelectSingleNode("text()[4]").InnerHtml.Trim();