CSQuery 是一个很棒的 C# 库,有助于在 C# 中解析 HTML。 https://github.com/jamietre/CsQuery
这是您对 sizzler/jQuery 的所有期望,而 James Treworgy 值得一些爱和钦佩。
为什么第一个 Select 的结果中的第二个 Select 会导致错误数量的元素?
CQ fragment = CQ.CreateFragment(@"
<div>
<ul>
<li class=""number english"">one</li>
<li class=""number english"">two</li>
<li class=""number english"">three</li>
<li class=""number english"">four</li>
<li class=""number english"">five</li>
</ul>
<ul>
<li class=""number spanish"">uno</li>
<li class=""number spanish"">dos</li>
<li class=""number spanish"">tres</li>
<li class=""number spanish"">quatro</li>
<li class=""number spanish"">cinco</li>
</ul>
</div>
");
Assert.AreEqual(2, fragment["ul"].Length);
CQ english = fragment["ul:first"];
CQ spanish = fragment["ul:last"];
Assert.AreEqual(1, english.Length);
Assert.AreEqual(1, spanish.Length);
// english seems to not represent only the first ul, but the entire DOM
CQ englishNumbers = english["li.number"];
Assert.AreEqual(5, englishNumbers.Length); // Failed, expected <5> and was <10>
// Both of these methods work. I'm at a loss for as to why the first does not.
CQ spanishNumbers = spanish["li.number", spanish[0]]; // Give it context of where to start searching from
Assert.AreEqual(5, spanishNumbers.Length);
CQ spanishNumbers2 = spanish.Select("li.number", spanish.Elements);
Assert.AreEqual(5, spanishNumbers2.Length);