我正在尝试解析html页面,我正面临一个问题,即我希望得到一个节点的内部文本,即在html节点上迭代孩子,假设每个文本段都是一个孩子:
<node1>
This text I WANT on iterate#1
<innernode>This text I WANT on iterate#2</innernode>
This text I WANT on iterate#3
<innernode>This text I WANT on iterate#4</innernode>
This text I WANT on iterate#5
</node1>
我使用htmlagilitypack作为解析器,但我认为我会遇到任何其他html解析器的问题
答案 0 :(得分:1)
要获得目标,请使用带有XPath的SelectNodes。
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(content);//content is the variable containing your html.
var items = doc.DocumentNode.SelectNodes("/node1//text()");
foreach (var item in items)
{
Console.WriteLine(item.OuterHtml.Replace("\r\n",""));
}
答案 1 :(得分:1)
根据您的.NET版本,您可以使用适用于您想要的节点的扩展方法。 我没有使用html敏捷包,所以这是C#和伪代码的混合。
例如
public static List<string> GetTextSegments(this HtmlNode node)
{
string nodesText = ... // get the nodes text
yield nodesText;
List<HtmlNode> innerNodes = ... // get the list of inner nodes with a
// query like node.SelectNodes("//innerNodes")
foreach(HtmlNode iNode in innerNodes)
{
string iNodeText = ... // get iNodes text
yield iNodeText;
}
}
然后你可以这样称呼它:
HtmlNode nodeOfTypeNode1 = ... //
foreach(string text : nodeOfTypeNode1.getTextSegments())
{
Console.WriteLine(text);
}