PathExpr ::= LocationPath | FilterExpr | FilterExpr '/' RelativeLocationPath | FilterExpr '//' RelativeLocationPath
(n node)
| 330 | |
| 331 | // PathExpr ::= LocationPath | FilterExpr | FilterExpr '/' RelativeLocationPath | FilterExpr '//' RelativeLocationPath |
| 332 | func (p *parser) parsePathExpr(n node) node { |
| 333 | var opnd node |
| 334 | if isPrimaryExpr(p.r) { |
| 335 | opnd = p.parseFilterExpr(n) |
| 336 | switch p.r.typ { |
| 337 | case itemSlash: |
| 338 | p.next() |
| 339 | opnd = p.parseRelativeLocationPath(opnd) |
| 340 | case itemSlashSlash: |
| 341 | p.next() |
| 342 | opnd = p.parseRelativeLocationPath(newAxisNode("descendant-or-self", allNode, "", "", "", opnd)) |
| 343 | } |
| 344 | } else { |
| 345 | opnd = p.parseLocationPath(nil) |
| 346 | } |
| 347 | return opnd |
| 348 | } |
| 349 | |
| 350 | // FilterExpr ::= PrimaryExpr | FilterExpr Predicate |
| 351 | func (p *parser) parseFilterExpr(n node) node { |
no test coverage detected