我正在开发一个需要解析大量html文件的项目。我需要从一个<p>
<div class="story-body">
到目前为止,我有这个代码并且它可以实现我想要的功能,但我想知道如何使用xpath表达式执行此操作。我试过这个:
textBody.SelectNodes ("What to put here? I tried //p but it gives every p in document not inside the one div")
但没有成功。有什么想法吗?
public void Parse(){
HtmlNode title = doc.DocumentNode.SelectSingleNode ("//h1[(@class='story-header')]");
HtmlNode textBody = doc.DocumentNode.SelectSingleNode ("//div[(@class='story-body')]");
XmlText textT;
XmlText textS;
string story = "";
if(title != null){
textT = xmlDoc.CreateTextNode(title.InnerText);
titleElement.AppendChild(textT);
Console.WriteLine(title.InnerText);
}
foreach (HtmlNode node in textBody.ChildNodes) {
if(node.Name == "p" || (node.Name == "span" && node.GetAttributeValue("class", "class") == "cross-head")){
story += node.InnerText + "\n\n";
Console.WriteLine(node.InnerText);
}
}
textS = xmlDoc.CreateTextNode (story);
storyElement.AppendChild (textS);
try
{
xmlDoc.Save("test.xml");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
答案 0 :(得分:0)
这是一个相当简单的事情,您只需要在.
之类的字符串中添加.//p
,这样您就只能得到当前节点的子节点。
另一种方法是像这样调用SelectNodes:
doc.DocumentNode.SelectNodes("//div[(@class='story-body')]/p");