最近在写一个软件,采集下来的html源代码,想过滤后留下所有的文本和图片。并且保存文本和图片的前后关系不变。
学习了站长苏飞的这篇http://www.sufeinet.com/thread-2120-1-1.html 利用HtmlAgilityPack解析元素。
尝试修改帖子中的代码来实现自己的需求,发现报错,详见下面代码中的注视。
[C#] 纯文本查看 复制代码 private void Setxpath(HtmlNode node)
{
foreach (HtmlNode item in node.ChildNodes)
{
if (item.XPath.Contains("#"))
{ ///html[1]/body[1]/div[1]/#text[1]
string str= hd.DocumentNode.SelectSingleNode(item.XPath).InnerText;//这里报错“表达式的计算结果必须为节点集”
continue;
}
if (item.ChildNodes.Count > 0)
{
XpathList.Add(new ObjXpath() { id = Index.ToString(), Key = item.XPath, Value = "" });
UIContorol(item.XPath);
Index++;
Setxpath(item);
}
else
{
XpathList.Add(new ObjXpath() { id = Index.ToString(), Key = item.XPath, Value = "" });
UIContorol(item.XPath);
Index++;
}
}
}
显然,当item.XPath是html[1]/body[1]/div[1]/#text[1]时,不能用str = hd.DocumentNode.SelectSingleNode(item.XPath).InnerText;来获取#text[1]
但是,当item.XPath是html[1]/body[1]/div[1]时, 却可以用str = hd.DocumentNode.SelectSingleNode(item.XPath).InnerText;来获取div[1]中的纯文字内容,但是如果div[1]里面还有图片的化,就很难保持原有的文字和图片的前后关系。
我想用#text的xpath表达式来直接获取#text的节点,应该怎么写?先谢谢各位了
|