Comments (8)
xpath库目前并不支持直接输出@属性值,它默认返回是包括指定@的元素,也就是一个Node
对象,得到对象后你才能获取它的@属性值。
elem := htmlquery.FindOne(root, `//img/@src`)
fmt.Println(htmlquery.SelectAttr(elem,"src"))
类似于这个:
xquery#2
from xpath.
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.
实际上是支持输出@属性值的,感谢作者的付出!
from xpath.
感谢支持 😄
from xpath.
我的测试代码:
func TestXPathAttribute(t *testing.T) {
FindEach(doc, "//a/@href", func(i int, nv NodeNavigator, node *html.Node) {
t.Log(i, nv.Value())
})
}
from xpath.
Hi, @gofmt ,向使用者暴露NodeNavigator
可能会造成用户的困惑,并在方法的使用上会更加复杂。
你的这个问题关于直接输出@属性值的,我之前有考虑过,实现一个Compile方法,并返回指定XPath查询的值(它可能是数字,可能是字符串,也可以是一个Node列表)。e5682c1#diff-04c6e90faac2675aa89e2176d2eec7d8L120
from xpath.
OK,期待!
from xpath.
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)
- Implementing variables HOT 1
- Error: (4,2) has an invalid token HOT 1
- error: xml: unsupported version "1.1"; only version 1.0 is supported
- Question HOT 2
- Implementing `current()` HOT 28
- And'ed expression for node selection.
- Bug: //a[@b='../../@b'], Condition expression with parent query(../../) expression filter
- last() not working on subgroups HOT 7
- Discussion: Provide `NodeNavigator` interface to get native data HOT 12
- The multiple filter query with `last()` function HOT 1
- How to use this in rust HOT 1
- string comparison size error HOT 1
- How get the xpath of selected html elem? HOT 1
- How to concatenate json values? HOT 2
- Thank you HOT 1
- stateful interface is cumbersome when performing multiple xpath queries on one document HOT 1
- The multiple filter query with last() and concat() function HOT 3
- How to "zip" two lists together? HOT 1
- Can you give some examples of usage of node axes? ex:getting the matching values of previous sibling and next sibling HOT 1
- why is panic used instead of returning errors? HOT 10
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from xpath.