【发布时间】:2013-07-28 21:00:26
【问题描述】:
我有一个结构如下的 HTML 文档
<ul class="beverageFacts">
<li>
<span>Vintage</span>
<strong>2007 </strong>
</li>
<li>
<span>ABV</span>
<strong>13,0 %</strong>
</li>
<li>
<span>Sugar</span>
<strong>5 gram/liter</strong>
</li>
我需要将<strong>-tag 的值解析为对应的string,具体取决于<span>-tag 的值。
我有以下几点:
String vintage;
String sugar;
String abv;
到目前为止,我正在循环遍历 beverageFacts-node 的每个子节点,检查值以将其解析为正确的对应 string。
到目前为止,我获得“Vintage”值的代码如下,尽管结果始终是null。
HtmlNodeCollection childNodes = bevFactNode.ChildNodes;
foreach (HtmlNode subNode in childNodes)
{
if (subNode.InnerText.TrimStart() == "Vintage")
vintage = subNode.NextSibling.InnerText.Trim();
}
我认为我对节点的选择不正确,但我不知道如何以最有效的方式正确执行。
有没有简单的方法来实现这一点?
编辑 2013-07-29
我已尝试使用以下代码删除 cmets 中 enricoariel 建议的空格
HtmlAgilityPack.HtmlDocument page = new HtmlWeb().Load("http://www.systembolaget.se/" + articleID);
string cleanDoc = Regex.Replace(page.DocumentNode.OuterHtml, @"\s*(?<capture><(?<markUp>\w+)>.*<\/\k<markUp>>)\s*", "${capture}", RegexOptions.Singleline);
HtmlDocument cleanPage = new HtmlDocument();
cleanPage.LoadHtml(cleanDoc);
结果还是
String vintage = null;
【问题讨论】:
-
问题是 nextSibling 是一个空格。如果你去掉标签之间的所有空白,你会得到正确的结果。在这里查看我的问题:stackoverflow.com/questions/17785682/…
-
我看不出你的问题对我有什么帮助。如果兄弟是空格,那么我的复古字符串不会也设置为“”而不是 null 吗?
-
删除空格,您会发现它会起作用:
- Vintage2007 ...
-
现在开始工作了!你是对的,有空格,我的清理方法不起作用!我将发布一个显示我的解决方案的答案!
标签: c# html-parsing html-agility-pack