var cats = doc.DocumentNode.SelectNodes("xpath1 | xpath2");
我使用|运算符计算多个节点和html agilitypack将它们放在一个包含所有结果的NodeCollection中,我如何知道Node是否是xpath1或xpath2的结果?
例如
var cats = doc.DocumentNode.SelectNodes("//*[contains(@name,'thename')]/../../div/ul/li/a | //*[contains(@name,'thename')]/../../div/ul/li/a/../div/ul/li/a");
我正在尝试构建树状结构,因为第一个xpath返回单个元素,第二个xpath返回单个或多个元素,第一个xpath是主树节点,第二个xpath是该节点的childeren,我想根据结果的内部文本构建一个List<string,List<string>>
。
为了使它更简单,请考虑以下Html:
<ul>
<li>
<h1>Node1</h1>
<ul>
<li>Node1_1</li>
<li>Node1_2</li>
<li>Node1_3</li>
<li>Node1_4</li>
</ul>
</li>
<li>
<h1>Node2</h1>
<ul>
<li>Node2_1</li>
<li>Node2_2</li>
</ul>
</li>
<li>
<h1>Node3</h1>
<ul>
<li>Node3_1</li>
<li>Node3_2</li>
<li>Node3_3</li>
</ul>
</li>
</ul>
var cats = doc.DocumentNode.SelectNodes("//ul/li/h1 | //ul/li/ul/li")
答案 0 :(得分:1)
为什么不这样做:
var head = doc.DocumentNode.SelectNodes("xpath1");
var children = head.SelectNodes("xpath2");
对于示例中的代码,您可以这样做:
var containerNodes = doc.DocumentNode.SelectNodes("//ul/li");
foreach(var n in containerNodes)
{
var headNode = n.SelectSingleNode("h1");
var subNodes = n.SelectNodes("ul/li");
}