【发布时间】:2013-12-17 02:28:40
【问题描述】:
首先,我对 html 的了解还不够基本。
我有这段 html 代码:
<div class="main_panel_sub">
<p>
<p>
<b>Genre</b>: pop<br/>
<b>Country</b>: USA<br />
<b>Year</b>: 2013<br />
<b>Audio codec</b>: MP3<br />
<b>Riptype</b>: tracks<br />
<b>Bitrate</b>: 320 kbps<br />
<b>Playtime</b>: 01:06:44<br />
<b>Size:</b> 153 MB<br />
<b>Site:</b>
<a href='XXXXXXX'>XXXXXXX.com</a>
</p>
</p>
我正在使用库 HTMLAgilityPack,我想检索 Genre 和 Year 值,我只需要知道正确的 XPath
这是我正在尝试使用的 XPATH,但我迷失了那些 <b> </b> <br/>
Genre = node.SelectSingleNode("..//div[@class='main_panel_sub']/p/p/b[1]").InnerText
Year = node.SelectSingleNode("..//div[@class='main_panel_sub']/p/p/b[3]").InnerText
在上面的第一行代码中,我得到了字符串Genre,而不是流派值Pop。
第二行我得到Year 字符串而不是2013。
更新:
一个(有问题的)变化 DIV 示例:
<div class="main_panel_sub">
<p><p><b>Genre</b>: Synthpop<br />
<b>Year</b>: 2012<br />
<b>Audio codec</b>: MP3<br />
<b>Riptype</b>: tracks<br />
<b>Bitrate</b>: VBR~256 kbps<br />
<b>Playtime</b>: 00:29:21<br />
<b>Size:</b> 57 MB<br />
<b>Site:</b> <a href='http://xxxxxxxxxxxx.com'>xxxx.com</a></p>
</p>
以及我尝试使用的代码:
Dim fields = (From field In node.SelectNodes("..//div[@class='main_panel_sub']//b")
Let contentNodes = field.ParentNode.ChildNodes.SkipWhile(Function(e) Not e.Equals(field)).
TakeWhile(Function(e) e.Equals(field) OrElse e.Name <> "b")
Let content = [String].Concat(contentNodes.[Select](Function(e) e.InnerText))
Select content.Split(":")).
ToDictionary(Function(s) s(0).ToLower.Trim(), Function(s) s(1).Trim())
【问题讨论】: