我正在尝试抓取一个html文档,以便从ul列表中获取具有以下结构的值:
<ul id="indicators0" class="connectedIndicators ui-sortable">
<li id="ind-speed" style="">speed=0.014774</li>
<li id="ind-speed_01" style="display: list-item;"></li>
...
</ul>
我可以通过使用Html Agility Pack跟踪网络中的众多示例轻松访问节点“indicators0”:
HtmlAgilityPack.HtmlNode node = htmlDocument.DocumentNode.SelectSingleNode("//ul[@id='indicators0']");
但是,任何尝试检索li节点都无法成功。我正在尝试以下内容:
HtmlAgilityPack.HtmlNode subNode = htmlDocument.DocumentNode.SelectNodes("//ul[@id='indicators0'] //li").FirstOrDefault();
或者
HtmlAgilityPack.HtmlNode subNode = node.Descendants("li").FirstOrDefault();
在两种情况下都返回空值。欢迎任何帮助。
答案 0 :(得分:0)
你试过吗。
HtmlAgilityPack.HtmlNode subNode = HtmlDocument.DocumentNode.SelectSingleNode("//ul[@id='indicators0']/li[1]");
当提取这些值时,您正在使用xsl向下映射到节点/节点以查找您要查找的项目,而只是第一个。
在第一个中,理所当然,所以将整个UL从html中拉出来。
另外2我现在看不出太多问题,道歉,我很累。
如果我的建议不起作用,您是否已调试以找出该节点的内容?你有可能在正确的时候找到正确的ul,或者你是否可能在动态加载之前寻找LI(我不确定你是否动态加载任何东西,只是做出一个假设)
如果LI的id始终相同,那么你也可以这样做
HtmlAgilityPack.HtmlNode subNode = HtmlDocument.DocumentNode.SelectSingleNode("//li[@id='ind-speed']");
如果收到了某些内容,那么你很有可能在htmlDoc的范围内首先找到你要查找的描述的多个ul