import (
"fmt"
"gopkg.in/xmlpath.v2"
"log"
)
...
path := xmlpath.MustCompile("//div[@id='23']")
tree, err := xmlpath.ParseHTML(reader)
if err != nil {
log.Fatal("HTML parsing error, maybe not wellformed", err)
}
iter := path.Iter(tree)
for iter.Next() {
fmt.Println(iter.Node().String()) // returns only the values of the text-node
}
...
有没有办法将iter.Node()
转换回像<div>...</div>
这样的html标记? iter.Node().String()
仅返回所有内部文本节点的值。据我所知,xmlpath-package的文档没有提供这样的功能。
答案 0 :(得分:0)
你是对的 - gopkg.in/xmlpath.v2
函数仅限于读取节点内容。 Go中使用DOM的方法并不多。
从本地Go库我只能提到goquery。它仅适用于HTML,不支持XPath,但支持CSS选择器。也许这就足够了。
如果你真的需要通过XPath使用HTML和XML,那么Go的libxml包装器称为gokogiri。它支持libxml的所有功能,因此您可以获取节点,内部/外部HTML,属性和其他内容。我用它来提取当前处于生产状态的一个服务中的文本内容。它比PHP的DOMDocument快一点。只有一个限制是我不确定它是否支持Go版本高于1.4。*。哦,在Windows上安装有点棘手。
答案 1 :(得分:0)