为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
素胚勾勒不出你 2022-01-04 10:15:03
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的文档没有提供这样的功能。
查看完整描述

2 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

你是对的 -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 上安装有点棘手。


查看完整回答
反对 回复 2022-01-04
?
RISEBY

TA贡献1856条经验 获得超5个赞

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


查看完整回答
反对 回复 2022-01-04
  • 2 回答
  • 0 关注
  • 235 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信