package main
import (
"bytes"
"code.google.com/p/go.net/html"
"fmt"
"log"
"strings"
)
func main() {
s := "Blah. <b>Blah.</b> Blah."
n, err := html.Parse(strings.NewReader(s))
if err != nil {
log.Fatalf("Parse error: %s", err)
}
var buf bytes.Buffer
if err := html.Render(&buf, n); err != nil {
log.Fatalf("Render error: %s", err)
}
fmt.Println(buf.String())
}
wyjściowa:Jakikolwiek sposób użycia html.Parse bez dodawania węzłów do "dobrze uformowanego drzewa"?
<html><head></head><body>Blah. <b>Blah.</b> Blah.</body></html>
Czy istnieje sposób, aby zatrzymać html.Parse
dokonywania dokumentu z fragmentów (tj unikać dodawania <html>
, <body>
itd.)? Jestem świadomy html.ParseFragment
, ale wygląda na to samo zachowanie.
można obejść poprzez owinięcie tekst, aby być analizowany z elementu nadrzędnego, takie jak <span>
potem robić coś jak poniżej:
n = n.FirstChild.LastChild.FirstChild
ale wydaje się, że dobrze, kludgy do powiedzenia najmniej.
Idealnie chciałbym: zaakceptować dane wejściowe, manipulować lub usunąć węzły znajdujące się w nim i zapisać wynik z powrotem do ciągu, nawet jeśli wynik jest niekompletny.
zanotować istnienia od [ 'goquery'] (https://github.com/PuerkitoBio/goquery), które mogą być przydatne dla zadań, które chcesz zrobić. – nemo
Dziękuję, a dla kompletności wymienię ponownie Jeremy'ego [go-html-transform] (https://code.google.com/p/go-html-transform), z którego korzystałem w przeszłości. Próbuję poradzić sobie z exp/html (teraz go.net/html), który prawdopodobnie wejdzie w standardową bibliotekę wokół wersji 1.2 lub podobnej, ale dobrze jest też zobaczyć te projekty stron trzecich. –