簡體   English   中英

F#HtmlProvider到HtmlNode

[英]F# HtmlProvider to HtmlNode

我可以找到HtmlProvider特定行。

是否有可能從HtmlProvider.Tables.Row獲取另一個HTML信息?

type Provider = HtmlProvider<"
<table><tbody>
 <tr><td class=\"orange\" >something2</td><td>20.1</td></tr>
 <tr><td class=\"grean\" >something</td><td>23.5</td></tr>
 <tr><td class=\"orange\" >something3</td><td>20.0</td></tr>
</tbody></table>">// backslashes are for escaping

let wantedRow = Provider.GetSample().Tables.Table1.Rows 
                |> Seq.filter (fun c->if float (c.Column2)=20.0 then true else false)
                |> Seq.head

現在我wantedRow並且可以提取something3字符串。

但我需要獲得該行的classorange )。

偽代碼一樣寫的東西( GetHtml是偽...):

(*Pseudo code warning *)
let tdTag= wantedRow.GetHtml.Descendants["td"] |>Seq.head 
let classStr = tdOfWantedRow.AttributeValue ("class")  //orange

是否可以輕松獲取HtmlProvider此類信息?

HtmlProviderTables功能將表視為數據,丟棄html屬性。 要獲得HTML本身,您可以將其視為HTML文檔:

let wantedRow = Provider.GetSample().Html.Descendants("tr")
                |> Seq.filter (fun x -> float((x.Descendants("td") |> Seq.item 1).InnerText()) = float(20.0))
                |> Seq.head

let cssClass = (wantedRow.Descendants() |> Seq.head).Attribute("class").Value()

printf "%s\n" cssClass
// prints "orange"

(當然,在現實世界的例子中,如果節點不存在或者浮點數不解析,你會想要一些保護措施,但這應該讓你朝着正確的方向前進)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM