2016-04-07 14 views
0

Bir html belgesini işlemeye çalışıyorum. Bu, golang.org/x/net/html'un Parsenil değeriyle *html.Node değerini döndürdüğünden, err da nil, bu da garip bir durumdur, çünkü işler Parse tarafından doğru bir şekilde işlenmediyse, bir hata almalıyım!net/html ayrıştırıcı belgeyi döndürür nil * html.Node ne olursa olsun

package main 

import (
    "bytes" 
    "golang.org/x/net/html" 
    "io/ioutil" 
    "log" 
) 

func main() { 
    html, err := ioutil.ReadFile("html/simple_01.html") 
    if e != nil { 
     fmt.Fatal(e) 
    } 
    doc, err := html.Parse(bytes.NewReader(html)) 
    if err != nil { 
     log.Fatal(err) 
    } 
    // locate <body> 
    var body *html.Node 
    for s := doc.NextSibling; s != nil; s = s.NextSibling { 
     if s.Data == "body" { 
      body = s 
      break 
     } 
    } 
    log.Println(body) 
} 

log.Println(body) baskılar nil:

Bu benim kodudur. Ayrıca doc yazdırma nil yazdırır, bu da gariptir. İşte

ben yanlış yapıyorum

<!DOCTYPE html> 
<html> 

<head> 
    <meta charset='utf-8'> 
    <title>Sample page - 01</title> 
</head> 

<body> 
    <p>Aspernatur vel molestiae eius sed sunt doloremque. Ipsa sed voluptate expedita tempore id. Ab nobis delectus magnam.</p> 
    <p>Beatae id mollitia nesciunt nesciunt qui explicabo cum. Aspernatur est molestiae laudantium assumenda consequuntur. Odit mollitia non inventore iusto. Id nihil voluptatem vitae. Fugit odio dolores atque sed.</p> 
    <p>Qui dolorem ipsum fugit vitae consequuntur suscipit debitis iste. Dignissimos impedit nobis quas facilis. Quia dignissimos perspiciatis quia debitis. Rerum beatae repellat architecto nostrum nulla facere rerum.</p> 
    <p>Quas natus ad qui excepturi dolorem. Quas dolorum dolores voluptatem distinctio quisquam culpa et. Ipsam voluptatem suscipit earum reprehenderit. Quos laudantium occaecati quis similique. Numquam rerum sunt rerum et necessitatibus. Laboriosam modi iure praesentium voluptates atque adipisci et.</p> 
    <p>Blanditiis dolores nemo quos voluptatem quo quia modi. Quia et alias nesciunt sint voluptatum omnis. Nihil minima ipsa magnam qui amet ea. Blanditiis laborum nihil tempora aliquam.</p> 
    <p>Ullam molestiae omnis magni ratione exercitationem minima. Sed sequi fugiat laborum omnis voluptas. Debitis sit expedita optio et at qui.</p> 
    <p>Fuga iusto quo eum sequi eum sint pariatur ipsam. Alias nisi maiores illum est ab culpa voluptas quidem. Veritatis eum qui deserunt aspernatur quo officia et ipsam.</p> 
    <p>Aliquam id autem earum autem eaque. Dolores veniam animi voluptatem. Et est nam culpa consequatur et ex distinctio. Quis iure sequi maiores quibusdam vel nostrum architecto et. Quisquam unde qui pariatur doloremque rerum.</p> 
    <p>Dicta est est fugit et architecto. Quia culpa vel error deleniti. Voluptatem fuga omnis eius ea et voluptatum dolor.</p> 
    <p>Eaque esse sint voluptatem praesentium ut sit. Fugiat ratione enim doloremque dolor asperiores. Tempora eveniet et aut.</p> 
</body> 

</html> 

karşı HTML dokümanı test ediyorum edilir?

+0

ilk hata işleme olarak, 'yerine err'' arasında e' kullanın. Ayrıca, okuma dosyasından 'html' çıktılarını yazdırdığınızda ne elde edersiniz? – PieOhPah

cevap

2

Kod örneğinizde birkaç yazım hatası vardır, ancak asıl sorun şu ki, kök düğümün bir sonraki kardeşini almaya çalışıyorsunuz. Önce ihtiyaç html etiketi almak ve oradan onun kardeşleri aracılığıyla sonra döngü ilk çocuğa gidip:

package main 

import (
    "bytes" 
    "golang.org/x/net/html" 
    "io/ioutil" 
    "log" 
) 

func main() { 
    htmlfile, err := ioutil.ReadFile("html/simple_01.html") 
    if err != nil { 
     log.Fatal(err) 
    } 

    doc, err := html.Parse(bytes.NewReader(htmlfile)) 
    if err != nil { 
     log.Fatal(err) 
    } 

    var htmlTag = doc.FirstChild.NextSibling 
    var body *html.Node 
    for s := htmlTag.FirstChild; s != nil; s = s.NextSibling { 
     if s.Data == "body" { 
      body = s 
      break 
     } 
    } 
    log.Println(body) 
} 
+1

Typos, tüm ilgili kodu farklı dosyalardan tek bir dosyaya yapıştırdığınızda gerçekleşir – shackra

+0

en iyisi olur :-) – tonisuter