HTMLAgilityPack 排除 类
HTMLAgilityPack Exclude by classes
我有一个 Ul 元素,它有 3 种不同类型的 li 子元素,我想通过 class 排除其中 2 种类型的子元素。使用 class = map 和 class = map-button
排除 li 元素
这是我正在摆弄的东西,
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(Constants.New_York.GetOffenderPageById(""+ 41586));
var querylist3 = from list in
doc.DocumentNode.SelectNodes("//ul[@class='address label-value']")
.Cast<HtmlNode>()
from row in list.SelectNodes("not(li[@class='map']) and not(li[@class='map-button'])")
.Cast<HtmlNode>()
select new { CellText = Utilities.RemoveHtmlCharacters(row.InnerText) };
foreach (var q1 in querylist3)
Console.WriteLine(q1.CellText);
所以我正在查看 HtmlAgilityPack SelectNodes expression to ignore an element with a certain attribute,但要么我无法正确理解解决方案,要么它不起作用。
我不想创建对象实例并与 linq 进行比较...
供参考,这是 HTML、
<ul class="address label-value">
<li><span class="label">Type</span><span class="value">RES (Primary)</span></li>
<li><span class="label">County</span><span class="value">Suffolk</span></li>
<li class="no-border-bottom"><span class="label">Address</span><span class="value">1010 OLD MEDFORD RD<br>FARMINGVILLE, New York 11738</span></li>
<li class="map-button"><a class="cta cta-blue cta-small" href="https://www.google.com/maps/embed/v1/place?key=AIzaSyDLQ6Qf1v0RJyudkTTEcAYsXPIewwO4F3w&zoom=17&q=1010 OLD MEDFORD RD,FARMINGVILLE,NY,11738">View on Map</a></li>
<li class="map">
<iframe src="" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" class="map-iframe"><!----></iframe>
<p><a href="../nsor/mapping-exceptions.htm">Learn about possible mapping exceptions.</a></p>
</li>
</ul>
我的回答不是我希望学到的...但它解决了问题。我还是想知道如何使用not within htmlnode的搜索参数select...
我暂时使用了 linq...不确定哪个更好...
var querylist3 = from list in doc.DocumentNode.SelectNodes("//ul[@class='address label-value']").Cast<HtmlNode>()
from row in list.SelectNodes("li").Where(x => !x.Attributes.Contains("class") || !x.Attributes["class"].Value.Contains("map")).Cast<HtmlNode>()
select new { CellText = Utilities.RemoveHtmlCharacters(row.InnerText) };
我有一个 Ul 元素,它有 3 种不同类型的 li 子元素,我想通过 class 排除其中 2 种类型的子元素。使用 class = map 和 class = map-button
排除 li 元素这是我正在摆弄的东西,
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(Constants.New_York.GetOffenderPageById(""+ 41586));
var querylist3 = from list in
doc.DocumentNode.SelectNodes("//ul[@class='address label-value']")
.Cast<HtmlNode>()
from row in list.SelectNodes("not(li[@class='map']) and not(li[@class='map-button'])")
.Cast<HtmlNode>()
select new { CellText = Utilities.RemoveHtmlCharacters(row.InnerText) };
foreach (var q1 in querylist3)
Console.WriteLine(q1.CellText);
所以我正在查看 HtmlAgilityPack SelectNodes expression to ignore an element with a certain attribute,但要么我无法正确理解解决方案,要么它不起作用。
我不想创建对象实例并与 linq 进行比较...
供参考,这是 HTML、
<ul class="address label-value">
<li><span class="label">Type</span><span class="value">RES (Primary)</span></li>
<li><span class="label">County</span><span class="value">Suffolk</span></li>
<li class="no-border-bottom"><span class="label">Address</span><span class="value">1010 OLD MEDFORD RD<br>FARMINGVILLE, New York 11738</span></li>
<li class="map-button"><a class="cta cta-blue cta-small" href="https://www.google.com/maps/embed/v1/place?key=AIzaSyDLQ6Qf1v0RJyudkTTEcAYsXPIewwO4F3w&zoom=17&q=1010 OLD MEDFORD RD,FARMINGVILLE,NY,11738">View on Map</a></li>
<li class="map">
<iframe src="" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" class="map-iframe"><!----></iframe>
<p><a href="../nsor/mapping-exceptions.htm">Learn about possible mapping exceptions.</a></p>
</li>
</ul>
我的回答不是我希望学到的...但它解决了问题。我还是想知道如何使用not within htmlnode的搜索参数select...
我暂时使用了 linq...不确定哪个更好...
var querylist3 = from list in doc.DocumentNode.SelectNodes("//ul[@class='address label-value']").Cast<HtmlNode>()
from row in list.SelectNodes("li").Where(x => !x.Attributes.Contains("class") || !x.Attributes["class"].Value.Contains("map")).Cast<HtmlNode>()
select new { CellText = Utilities.RemoveHtmlCharacters(row.InnerText) };