我正在使用 sgmlreader 将 HTML 转换为 XML。输出进入一个 XmlDocument 对象,然后我可以使用 InnerText 方法从网站中提取纯文本。我试图通过删除任何 javascript 使文本看起来尽可能干净。遍历 xml 并删除任何<script type="text/javascript">
内容很容易,但是当任何 jquery 或样式未封装在任何标签中时,我遇到了障碍。有人可以帮帮我吗?
示例代码:
第一步:一旦我使用 webclient 类下载 HTML,我保存它,然后使用文本阅读器类打开文件。
第二步:创建 sgmlreader 类并将输入流设置为文本阅读器:
// setup SGMLReader
Sgml.SgmlReader sgmlReader = new Sgml.SgmlReader();
sgmlReader.DocType = "HTML";
sgmlReader.WhitespaceHandling = WhitespaceHandling.All;
sgmlReader.CaseFolding = Sgml.CaseFolding.ToLower;
sgmlReader.InputStream = reader;
// create document
doc = new XmlDocument();
doc.PreserveWhitespace = true;
doc.XmlResolver = null;
doc.Load(sgmlReader);
第三步:一旦我有了一个 xmldocument,我就使用 doc.InnerText 来获取我的纯文本。
第四步:我可以像这样轻松删除 JavaScript 标签:
XmlNodeList nodes = document.GetElementsByTagName("text/javascript");
for (int i = nodes.Count - 1; i >= 0; i--)
{
nodes[i].ParentNode.RemoveChild(nodes[i]);
}
有些东西还是漏了。这是我正在编写的一个特定网站的输出示例:
Criminal and Civil Enforcement | Fraud | Office of Inspector General | U.S. Department of Health and Human Services
#fancybox-right {
right:-20px;
}
#fancybox-left {
left:-20px;
}
#fancybox-right:hover span, #fancybox-right span
#fancybox-right:hover span, #fancybox-right span {
left:auto;
right:0;
}
#fancybox-left:hover span, #fancybox-left span
#fancybox-left:hover span, #fancybox-left span {
right:auto;
left:0;
}
#fancybox-overlay {
/* background: url('/connections/images/wc-overlay.png'); */
/* background: url('/connections/images/banner.png') center center no-repeat; */
}
$(document).ready(function(){
$("a[rel=photo-show]").fancybox({
'titlePosition' : 'over',
'overlayColor' : '#000',
'overlayOpacity' : 0.9
});
$(".title-under").fancybox({
'titlePosition' : 'outside',
'overlayColor' : '#000',
'overlayOpacity' : 0.9
})
});
需要删除该 jquery 和样式。