Code Monkey home page Code Monkey logo

Comments (8)

zhengchun avatar zhengchun commented on June 12, 2024

xpath库目前并不支持直接输出@属性值,它默认返回是包括指定@的元素,也就是一个Node对象,得到对象后你才能获取它的@属性值。

elem := htmlquery.FindOne(root, `//img/@src`)
fmt.Println(htmlquery.SelectAttr(elem,"src"))

类似于这个:
xquery#2

from xpath.

 avatar commented on June 12, 2024

OK,这个问题我大概调试出来了。

// FindEach searches the html.Node and calls functions cb.
func FindEach(top *html.Node, expr string, cb func(int, NodeNavigator, *html.Node)) {
	t := Select(CreateXPathNavigator(top), expr)
	i := 0
	for t.MoveNext() {
		cb(i, t.Current().(*htmlNodeNavigator), (t.Current().(*htmlNodeNavigator)).curr)
		i++
	}
}

我将htmlNodeNavigator暴露出来,然后就能直接输出值了。

from xpath.

 avatar commented on June 12, 2024

实际上是支持输出@属性值的,感谢作者的付出!

from xpath.

zhengchun avatar zhengchun commented on June 12, 2024

感谢支持 😄

from xpath.

 avatar commented on June 12, 2024

我的测试代码:

func TestXPathAttribute(t *testing.T) {
	FindEach(doc, "//a/@href", func(i int, nv NodeNavigator, node *html.Node) {
		t.Log(i, nv.Value())
	})
}

from xpath.

zhengchun avatar zhengchun commented on June 12, 2024

Hi, @gofmt ,向使用者暴露NodeNavigator可能会造成用户的困惑,并在方法的使用上会更加复杂。

你的这个问题关于直接输出@属性值的,我之前有考虑过,实现一个Compile方法,并返回指定XPath查询的值(它可能是数字,可能是字符串,也可以是一个Node列表)。e5682c1#diff-04c6e90faac2675aa89e2176d2eec7d8L120

from xpath.

 avatar commented on June 12, 2024

OK,期待!

from xpath.

zhengchun avatar zhengchun commented on June 12, 2024
expr, err := xpath.Compile("//img/@src")
val := expr.Evaluate(nav)
switch typ := val.(type) {
case *xpath.NodeIterator:
    for typ.MoveNext() {
	fmt.Println(typ.Current().Value()) // output @src value
    }
}

xpath_testL184
@gofmt,最新包已经能够支持@值的输出,这个Issue将关闭。

from xpath.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.