获取HtmlDocument的文本节点

时间:2014-03-23 19:42:51

标签: c# browser dom

加载WebBrowser文档后,其文档包含以下内容:

<div id="toextract">
    <div>This</div>
    <div>is</div>
    Sample
    <div>text</div>
    I
    <div>want to</div>
    <div>Extract</div>
</div>

我想提取这些元素的InnerHtml,以便输出为:

这是我要提取的示例文字

但我明白了:

这是想要提取的文字

单词 I 示例不在HtmlElement中。这是我的代码:

string Ex = "";
HtmlElement elem = webBrowser1.Document.GetElementById("toextract");
HtmlElementCollection elems = elem.All
for(int i=0;i<elems.Count;i++)
    Ex += elems[i].InnerHtml + " ";

我的代码跳过文本节点(没有标记的节点)。我认为它是因为它们不被视为HtmlElement。 如何将它们包含在我提取的文本中?

2 个答案:

答案 0 :(得分:2)

只需使用

获取文字
  

elem.InnerText

并删除任何类似的换行符

  

elem.InnerText.Replace(System.Environment.NewLine,“”)

答案 1 :(得分:0)

尝试从元素更改为childNodes,然后剥离不需要的空格和换行符。像这样的东西(尚未测试):

string Ex = "";
HtmlElement elem = webBrowser1.Document.GetElementById("toextract");
NodeList nodes = elem.childNodes;
for(int i=0;i<nodes.Count;i++)
    Ex += nodes[i].data + " ";
Ex = Regex.Replace(Ex, @"(?:(?:\r?\n)+ +){2,}", @" ");

对于类似的Q&amp; A,请参阅 best way to get child nodesHow to remove extra returns and spaces in a string by regex?