在 Go 中将 xpath 节点转换回 html 标记

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()回 html 标记之类的<div>...</div>?iter.Node().String()仅返回所有内部文本节点的值。据我所知,xmlpath-package的文档没有提供这样的功能。


素胚勾勒不出你
浏览 236回答 2
2回答

largeQ

你是对的 -gopkg.in/xmlpath.v2功能仅限于读取节点的内容。在 Go 中使用 DOM 的替代方案并不多。在本机 Go 库中,我只能提到goquery。它仅适用于 HTML,不支持 XPath 但支持 CSS 选择器。也许这对你来说就足够了。如果您真的需要通过 XPath 处理 HTML 和 XML,那么 Go 的 libxml 包装器称为gokogiri。它支持 libxml 的所有功能,因此您可以获取节点、内部/外部 HTML、属性和其他内容。我用它来提取当前处于生产状态的一项服务中的文本内容。它比 PHP 的 DOMDocument 快一点。只有一个限制是我不确定它是否支持高于 1.4.* 的 Go 版本。哦,在 Windows 上安装有点棘手。

RISEBY

我知道这个答案来晚了,但仍然推荐这些由本地 Go 编写的包:xquery和xpath。它支持使用 XPath 表达式从 XML/HTML 中提取数据或评估值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go