【发布时间】:2011-02-16 14:59:37
【问题描述】:
我正在使用 HtmlAgilityPack。是否有一行代码可以获取 html 的所有内部文本,例如,删除所有 html 标签和脚本?
【问题讨论】:
标签: c# html-parsing
我正在使用 HtmlAgilityPack。是否有一行代码可以获取 html 的所有内部文本,例如,删除所有 html 标签和脚本?
【问题讨论】:
标签: c# html-parsing
像这样:
document.DocumentNode.InnerText
注意,这将返回<script>标签的文本内容。
要解决这个问题,您可以删除所有 <script> 标记,如下所示:
foreach(var script in doc.DocumentNode.Descendants("script").ToArray())
script.Remove();
foreach(var style in doc.DocumentNode.Descendants("style").ToArray())
style.Remove();
【讨论】:
我写了一个简单的方法。它可能会帮助你。此方法可以提取所有特定标签的节点。然后你可以使用HtmlNodeCollection[i].InnerText 来获取它的文本。
HtmlDocument hDoc;
HtmlNodeCollection nodeCollection;
public void InitInstance(string htmlCode) {
hDoc.LoadHtml(htmlCode);
nodeCollection = new HtmlNodeCollection();
}
private void GetAllNodesInnerTextByTagName(HtmlNode node, string tagName) {
if (null == node.ChildNodes) {
return ;
} else {
HtmlNodeCollection nCollection = node.SelectNodes( tagName );
if( null != nCollection ) {
for( int i=0; i<nCollection.Count; i++) {
nodeCollection.Add( nCollection[i]);
nCollection[i].Remove();
}
}
nCollection=node.ChildNodes;
if(null != nCollection) {
for(int i=0;i<nCollection.Count; i++) {
GetAllNodesInnerTextByTagName( nCollection[i] , tagName );
}
}
}
【讨论】:
标签中。