【发布时间】:2022-07-16 15:56:18
【问题描述】:
我有这样的结构:
<ul>
<li class="list-group-item px-0">
<h2>Foo</h2>
<ul>
<li class="list-group-item">
<h3>Test</h3>
</li>
</ul>
</li>
<li class="list-group-item px-0">
<h2>Contoso</h2>
<ul>
<li class="list-group-item">
<h3>Test 2</h3>
</li>
</ul>
</li>
</ul>
我正在尝试获取属于迭代中节点的所有 li,这是第一个 ul,所以结果应该返回:Foo 和 Contoso 但我得到了所有可用的 li,这是我的代码:
var liCollection = node.SelectNodes(".//ul/li[@class='list-group-item']");
我可以通过添加 px-0 来解决这个问题,但在迭代中只能获取与第一个 ul 关联的 li?
完整代码:
【问题讨论】:
-
@Stefan 抱歉只是我的示例(已修复)以显示完整代码:pastebin.com/wjE2q1n2
-
我认为你的问题是“//ul”而不是“/ul”。使用两个 // 您正在搜索所有 ul 元素。同一个,仅在当前元素中。 docs.microsoft.com/en-us/previous-versions/dotnet/…
-
@Victor 如果我切换到
node.SelectNodes("./ul/li");,我会得到null。如果你看完整的代码,你可以看到node实际上是手风琴,例如:<div id="collapse0" -
尝试只获取第一个节点 (SelectSingleNode)。你得到第一个 li。然后,获取最接近的 ul (或相同的父级)并使用 XPath 单 / 来获取 li (“./li[@class='list-group-item']”,如果我没记错的话)
-
@sfarzoso 看看更新的答案。我分享了一种方法,将所有数据组合并提取为 json
标签: c# html-agility-pack