我想使用XPath选择一个包含强子标记的p标记,并将其作为键放在键值对中。我想要跟随p标签直到遇到下一个强标签的值。
不幸的是,我正在处理的HTML并不是我自己的,因此我无法修改其结构以使其更简单。如果文本是已知的,我将看到以这种方式使用XPath的几个示例,但是在这种情况下,特定的文本是可变的。
以下是简化的HTMl的相关部分:
<div class="div_1">
<div class="div_2">
<p><em><strong>Title 1</strong></em> Some Text</p>
<p>Some Text <a class="tooltip">Some Text</a></p>
<p>Some Text <a class="tooltip">Some Text</a></p>
<p>Some Text <a class="tooltip">Some Text</a></p>
<p><em><strong>Title 2</strong></em> Some Text.</p>
</div>
</div>
这是我在VB中尝试的方法:
For Each trait_head As HtmlAgilityPack.HtmlNode In content.DocumentNode.SelectNodes(
"//div[@class='div_1']/div[@class='div_2']/p/em/strong")
trait_heading = trait_head.InnerText
trait_heading = trait_heading.Trim().Replace(vbCr, "").Replace(vbLf, "")
For Each trait_bod As HtmlAgilityPack.HtmlNode In content.DocumentNode.SelectNodes(
"//div[@class='div_1']/div[@class='div_2']/p")
If trait_body Is Nothing Then
trait_body = trait_bod.InnerText
Else
trait_body = trait_body & vbCr & vblf & trait_bod.InnerText
End If
Next
trait_value.add(New KeyValuePair(Of String, String)(trait_heading, trait_body))
Next
因此,我需要修改的是第二个XPath语句,以使for循环一旦以strong命中第二个p标签就中断了。
寻找此结果:
trait_value =“标题1” =>“某些文本vbcr vblf一些文本vbcr vblf一些文本vbcr vblf一些文本vbcr vblf”,“标题2” =>“某些文本”
希望我在这里要问的只是使用XPath是可能的,但是如果有人完全对另一种方法有建议,我将很高兴听到他们的建议。
答案 0 :(得分:0)
最终结果:
For Each trait_head As HtmlAgilityPack.HtmlNode In content.DocumentNode.SelectNodes(
"//div[@class='div_1']/div[@class='div_2']/p/em/strong")
trait_heading = trait_head.InnerText
trait_heading = trait_heading.Trim().Replace(vbCr, "").Replace(vbLf, "")
For Each trait_bod As HtmlAgilityPack.HtmlNode In content.DocumentNode.SelectNodes(
"//div[@class='div_1']/div[@class='div_2']/p[em/strong]")
If trait_body Is Nothing Then
trait_body = trait_bod.LastChild
Else
trait_body = trait_body & vbCr & vblf & trait_bod.LastChild
End If
Next
trait_value.add(New KeyValuePair(Of String, String)(trait_heading, trait_body))
Next