计算多个节点集

本文关键字:点集 节点 计算 | 更新日期: 2023-09-27 17:54:29

var cats = doc.DocumentNode.SelectNodes("xpath1 | xpath2");

我使用|运算符来计算多个节点和html敏捷包把它们放在一个单一的NodeCollection包含所有的结果,我怎么知道如果节点是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是该节点的子节点,我想基于结果的内部文本构建一个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")

计算多个节点集

为什么不直接做:

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");
}