如何获取每个节点的 href 元素和属性?
How to get href elements and attributes for each node?
我正在做一个项目,它应该是 html,找到所有匹配某个值的节点,然后找到找到的节点的元素和属性。
不过,我很难弄清楚如何获取 href 属性和元素。
我正在使用 HTMLAgilityPack。
我有很多
的节点
class="middle"
整个 html。我需要获取所有这些,并从中获取 href 元素和属性。以下是 html:
的示例
<div class="top">
<div class="left">
<a href="item123">
<img src="url.png" border="0" />
</a>
</div>
</div>
<div class="middle">
<div class="title"><a href="item123">Captains Hat</a></div>
<div class="day">monday</div>
<div class="city">Tuscon, AZ | 100 Days | <script typs="text/javascript">document.write(ts_to_age_min(1445620427));</script></div>
</div>
我已经能够获得我需要的其他属性,但 'href' 没有。
这是我的代码:
List<string> listResults = new List<string>();
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(url);
//get each listing
foreach (HtmlNode node in doc.DocumentNode.Descendants("div").Where(d =>
d.Attributes.Contains("class") && d.Attributes["class"].Value.Contains("middle")))
{
string day = node.SelectSingleNode(".//*[contains(@class,'day')]").InnerHtml;
string city = node.SelectSingleNode(".//*[contains(@class,'city')]").InnerHtml;
string item = node.SelectSingleNode("//a").Attributes["href"].Value;
listResults.Add(day + EnvironmentNewline
+ city + EnvironmentNewline
+ item + EnvironmentNewline + EnvironmentNewline)
}
虽然我上面的代码为我提供了整个 html 页面的第一个 href 值,但出于某种原因为每个节点提供了它(通过将列表输出到消息框可见)。我认为在我的 foreach 循环中,使用 SelectSingleNode 应该获得该特定节点的第一个 href 属性。如果是这样,为什么我要加载整个 html 页面的第一个 href 属性?
我在这里讨论了很多关于使用 HTLMAgilityPack 获取 href 值的话题,但我一直无法让它发挥作用。
如何根据 class 属性 (class="middle") 获取我选择的每个节点的 href 属性和元素?
尝试替换
string item = node.SelectSingleNode("//a").Attributes["href"].Value;
和
string item = node.SelectSingleNode(".//a").Attributes["href"].Value;
除此之外,上面的代码对我有用。
或者:
string item = node.SelectSingleNode(".//*[contains(@class,'title')]")
.Descendants("a").FirstOrDefault().Attributes["href"].Value;
我正在做一个项目,它应该是 html,找到所有匹配某个值的节点,然后找到找到的节点的元素和属性。 不过,我很难弄清楚如何获取 href 属性和元素。
我正在使用 HTMLAgilityPack。 我有很多
的节点class="middle"
整个 html。我需要获取所有这些,并从中获取 href 元素和属性。以下是 html:
的示例<div class="top">
<div class="left">
<a href="item123">
<img src="url.png" border="0" />
</a>
</div>
</div>
<div class="middle">
<div class="title"><a href="item123">Captains Hat</a></div>
<div class="day">monday</div>
<div class="city">Tuscon, AZ | 100 Days | <script typs="text/javascript">document.write(ts_to_age_min(1445620427));</script></div>
</div>
我已经能够获得我需要的其他属性,但 'href' 没有。 这是我的代码:
List<string> listResults = new List<string>();
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(url);
//get each listing
foreach (HtmlNode node in doc.DocumentNode.Descendants("div").Where(d =>
d.Attributes.Contains("class") && d.Attributes["class"].Value.Contains("middle")))
{
string day = node.SelectSingleNode(".//*[contains(@class,'day')]").InnerHtml;
string city = node.SelectSingleNode(".//*[contains(@class,'city')]").InnerHtml;
string item = node.SelectSingleNode("//a").Attributes["href"].Value;
listResults.Add(day + EnvironmentNewline
+ city + EnvironmentNewline
+ item + EnvironmentNewline + EnvironmentNewline)
}
虽然我上面的代码为我提供了整个 html 页面的第一个 href 值,但出于某种原因为每个节点提供了它(通过将列表输出到消息框可见)。我认为在我的 foreach 循环中,使用 SelectSingleNode 应该获得该特定节点的第一个 href 属性。如果是这样,为什么我要加载整个 html 页面的第一个 href 属性?
我在这里讨论了很多关于使用 HTLMAgilityPack 获取 href 值的话题,但我一直无法让它发挥作用。
如何根据 class 属性 (class="middle") 获取我选择的每个节点的 href 属性和元素?
尝试替换
string item = node.SelectSingleNode("//a").Attributes["href"].Value;
和
string item = node.SelectSingleNode(".//a").Attributes["href"].Value;
除此之外,上面的代码对我有用。
或者:
string item = node.SelectSingleNode(".//*[contains(@class,'title')]")
.Descendants("a").FirstOrDefault().Attributes["href"].Value;