将xpath节点转换回Go中的html-markup

时间:2016-04-08 14:27:07

标签: xpath go

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的文档没有提供这样的功能。

2 个答案:

答案 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)

我知道这个答案是迟到的,但仍然推荐这些由本地Go:xqueryxpath编写的软件包。它支持使用XPath表达式从XML / HTML中提取数据或评估值。