Skip to content

Commit 3a5c0b6

Browse files
committed
support read kbin
1 parent d013e3f commit 3a5c0b6

File tree

6 files changed

+933
-13
lines changed

6 files changed

+933
-13
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,7 @@
2020
*build/*
2121
*.exe
2222
*.bat
23+
24+
# custom
25+
*.xml
26+
*.list

go.mod

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,9 @@ module github.com/littlecxm/kcheck
22

33
go 1.14
44

5-
require golang.org/x/net v0.0.0-20200513185701-a91f0712d120
5+
require (
6+
github.com/beevik/etree v1.1.0
7+
github.com/orcaman/writerseeker v0.0.0-20200621085525-1d3f536ff85e
8+
golang.org/x/net v0.0.0-20200513185701-a91f0712d120
9+
golang.org/x/text v0.3.0
10+
)

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
github.com/beevik/etree v1.1.0 h1:T0xke/WvNtMoCqgzPhkX2r4rjY3GDZFi+FjpRZY2Jbs=
2+
github.com/beevik/etree v1.1.0/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62wh+A=
3+
github.com/orcaman/writerseeker v0.0.0-20200621085525-1d3f536ff85e h1:s2RNOM/IGdY0Y6qfTeUKhDawdHDpK9RGBdx80qN4Ttw=
4+
github.com/orcaman/writerseeker v0.0.0-20200621085525-1d3f536ff85e/go.mod h1:nBdnFKj15wFbf94Rwfq4m30eAcyY9V/IyKAGQFtqkW0=
15
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
26
golang.org/x/net v0.0.0-20200513185701-a91f0712d120 h1:EZ3cVSzKOlJxAd8e8YAJ7no8nNypTxexh/YE/xW3ZEY=
37
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=

kbinxml/iterwalk.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package kbinxml
2+
3+
import "github.com/beevik/etree"
4+
5+
//IterWalker structure
6+
type IterWalker struct {
7+
doc *etree.Document
8+
node *nodeWalker
9+
eof bool
10+
}
11+
12+
type nodeWalker struct {
13+
node *etree.Element
14+
currentChildIndex int
15+
parent *nodeWalker
16+
}
17+
18+
// IterWalk through a xml document
19+
func IterWalk(doc *etree.Document) *IterWalker {
20+
return &IterWalker{doc, &nodeWalker{doc.Root(), 0, nil}, false}
21+
}
22+
23+
// Walk a step
24+
func (i *IterWalker) Walk() (node *etree.Element, event string) {
25+
if i.eof {
26+
return i.doc.Root(), "eof"
27+
}
28+
children := i.node.node.ChildElements()
29+
if i.node.currentChildIndex == len(children) {
30+
event = "end"
31+
retNode := i.node.node
32+
if i.node.parent == nil {
33+
i.eof = true
34+
} else {
35+
i.node.parent.currentChildIndex++
36+
i.node = i.node.parent
37+
}
38+
return retNode, event
39+
}
40+
newNode := &nodeWalker{children[i.node.currentChildIndex],
41+
0,
42+
i.node}
43+
i.node = newNode
44+
return i.node.node, "start"
45+
46+
}

0 commit comments

Comments
 (0)