-
Notifications
You must be signed in to change notification settings - Fork 0
/
queryParser.go
51 lines (47 loc) · 1.01 KB
/
queryParser.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package queryParser
import (
"strings"
"github.com/tcw/saxer/tagPath"
)
func Parse(query string) *tagPath.TagPath {
split := strings.Split(query, "/")
path := tagPath.NewTagPath()
for _, value := range split {
tagText := strings.TrimSpace(value)
if len(tagText) != 0 {
addTag(tagText, path)
}
}
return path
}
func addTag(tagText string, tp *tagPath.TagPath) {
tag := tp.NextTag()
if strings.Contains(tagText, "?") {
elem := strings.Split(tagText, "?")
if len(elem) != 0 {
if len(elem[0]) > 0 {
tag.Name = elem[0]
}
if len(elem[1]) > 0 {
if strings.Contains(elem[1], "&") {
attr := strings.Split(elem[1], "&")
for _, val := range attr {
addToAttribute(val, tag)
}
}else {
addToAttribute(elem[1], tag)
}
}
}
}else {
tag.Name = tagText
}
}
func addToAttribute(attr string, tg *tagPath.Tag) {
if strings.Contains(attr, "=") {
attrKeyVal := strings.Split(attr, "=")
tg.AddAttribute(attrKeyVal[0], attrKeyVal[1])
}else {
tg.AddAttribute(attr, "")
}
}