2014-06-05 88 views
-3

我试图通过TD解析HTML文档使用C# 标记,以便解析HTML行内文本

<td>Whatever string</td><td class="pass">value</td> 

将返回

Whatever string : value 

我已经在这个花了几个小时问题,尝试XML解析器和正则表达式,但无济于事。谢谢你的帮助。

我已经尝试

List<string> list = Regex.Split(lineslineWithTdTag[i], "[<td>].[<\td>]").ToList(); 
    List<string> status = Regex.Split(list[3], "[pass=\"].\"").ToList() ; 

,然后我试图解析该列表

+1

你需要证明你已经尝试任何代码。 – Donal

+1

你试过了什么?如果您发布您正在使用的代码,我们可以帮助解决问题。 –

+0

您是否尝试过HtmlAgilityPack? –

回答

0

在招致较真的“与正则表达式不能解析HTML”的愤怒的风险,这里有一个正则表达式解决方案应该做你想要什么:

var match = Regex.Match(lineslineWithTdTag[I], "<td>(.*?)</td><td.*?>(.*?)</td>"); 
string result = String.Format(match.Groups[1].Value + " : " + match.Groups[2].Value); 

当然,如果实际记录却没有得到很好格式化为你的榜样,那么所有的赌注都关闭。

+0

http://stackoverflow.com/questions/1732348/regex-match-open -tags-except-xhtml-self-contained-tags#1732454 – Icemanind

+0

@icemanind - 是的,我在上面的评论中看到了这一点,并且热爱这个答案。我同意正则表达式不能用于解析HTML。但是,对于可预见的HTML格式的可能的HTML情况的一个子集,它可能是有用的。 –

+0

真棒非常感谢你这真的帮助了一堆! – user3386190

0

了很多工作后,该结束了我的解决方案

 string path = @"http://localhost/page.html"; 
     XDocument myX = XDocument.Load(path); 
     string field1 = ""; 
     string field2 = ""; 
     bool flag = true; 
     foreach (var name in myX.Root.DescendantNodes().OfType<XElement>()) 
     { 
      // get the first element 
      if (name.Name.LocalName == "td" && flag) 
      { 
       field1 = (string)name + "\n"; 
       flag = false; 
      } 
      // get the second element 
      else if (name.Name.LocalName == "td") 
      { 
       field2 = (string)name + "\n"; 
       flag = true; 
      } 
     } 
    }