【发布时间】:2014-02-06 18:01:11
【问题描述】:
在这个 HTML 源代码中,
<strong>Apple</strong> <span id="apple">Red</span>
<strong>Orange</strong> <span id="orange">Orange</span>
<strong>Beans</strong> <span id="beans">Green</span>
<strong>Carrot</strong> <span id="carrot">Orange</span>
<strong>Banana</strong> <span id="banana">Yellow</span>
<strong>Grapes</strong> <span id="grape">Green</span>
我正在尝试使用 HTML Agility Pack 并检索豆和胡萝卜颜色(绿色、橙色),它们分别是 span id beans 和胡萝卜的内部文本
使用代码
string beans= document.DocumentNode.Descendants("span")
.Where(node => node.Attributes["id"] != null && node.Attributes["id"].Value == "beans")
.ToArray().ElementAt(0).InnerText.Trim();
string carrot = document.DocumentNode.Descendants("span")
.Where(node => node.Attributes["id"] != null && node.Attributes["id"].Value == "carrot")
.ToArray().ElementAt(0).InnerText.Trim();
但是代码搜索 SPAN 节点两次需要更多时间。我想知道是否有任何其他方式可以更有效地访问特定 SPAN 元素。
没有此代码,源代码通过 Agility Pack 更快地加载到文档中。加入这段代码后已经延迟了进程。
如果 HTML 源代码没有特定 ID,它会给出异常。
我想将两种蔬菜颜色(绿色和橙色)分别保存在两个变量中,因为我将使用 LIST 将其转换为逗号分隔的 txt 文件。
【问题讨论】:
-
您可以将所有这些 LINQ 调用替换为
.First() -
@SLaks 您的意思是将 ElementAt(0) 更改为 .First()?此外,该页面仅包含一次 beans/cart Span ID
-
否;我的意思是摆脱
ToArray() -
您可以改用 XPath。
-
@Vkt0rS。 XPath 会比 Linq 快吗?我只是想提高代码性能
标签: c# html-agility-pack getelementbyid