看看去xml包我找不到这种可能性.
Go只允许定义结构树,将它们映射到XML树并使用反序列化xml.NewDecoder(myXmlString).Decode(myStruct)
.
即使我定义了需要的Go结构树,我仍然无法使用XPath查询该树.
C#具有方便的函数SelectSingleNode,它允许通过指定XPath从XML树中选择值,而无需在C#类中复制整个树结构.
Go有类似的可能吗?如果没有,那么实现它的最简单方法是什么(可能重用xml包)?
rzy*_*mek 12
还有xmlpath包.
样品用法:
path := xmlpath.MustCompile("/library/book/isbn")
root, err := xmlpath.Parse(file)
if err != nil {
log.Fatal(err)
}
if value, ok := path.String(root); ok {
fmt.Println("Found:", value)
}
Run Code Online (Sandbox Code Playgroud)
即使不是xpath,您也可以使用本机go xml编码器包读取XML中的值.您将使用xml.Unmarshal()函数.这是一个游戏示例.
package main
import "fmt"
import "encoding/xml"
func main() {
type People struct {
Names []string `xml:"Person>FullName"`
}
data := `
<People>
<Person>
<FullName>Jerome Anthony</FullName>
</Person>
<Person>
<FullName>Christina</FullName>
</Person>
</People>
`
v := People{Names: []string{}}
err := xml.Unmarshal([]byte(data), &v)
if err != nil {
fmt.Printf("error: %v", err)
return
}
fmt.Printf("Names of people: %q", v)
}
Run Code Online (Sandbox Code Playgroud)
xmlquery使您可以使用XPath表达式从XML文档中提取数据。
package main
import (
"fmt"
"strings"
"github.com/antchfx/xmlquery"
)
func main() {
htmlstr := `<?xml version="1.0" ?>
<html>
<head>
<title>this is a title</title>
</head>
<body>Hello,World</body>
</html>`
root, err := xmlquery.Parse(strings.NewReader(htmlstr))
if err != nil {
panic(err)
}
title := xmlquery.FindOne(root, "//title")
fmt.Println(title.InnerText())
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10697 次 |
最近记录: |