本文整理汇总了Golang中github.com/jteeuwen/go-pkg-xmlx.Node类的典型用法代码示例。如果您正苦于以下问题:Golang Node类的具体用法?Golang Node怎么用?Golang Node使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Node类的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: GetVersionInfo
// Returns the type of the feed, ie. "atom" or "rss", and the version number as an array.
// The first item in the array is the major and the second the minor version number.
func (this *Feed) GetVersionInfo(doc *xmlx.Document) (ftype string, fversion [2]int) {
var node *xmlx.Node
if this.isAtom(doc) {
ftype = "atom"
fversion = [2]int{1, 0}
return
}
if this.isRss(doc) {
ftype = "rss"
major := 0
minor := 0
version := node.As("", "version")
p := strings.Index(version, ".")
if p != -1 {
major, _ = strconv.Atoi(version[0:p])
minor, _ = strconv.Atoi(version[p+1 : len(version)])
}
fversion = [2]int{major, minor}
return
}
// issue#5: Some documents have an RDF root node instead of rss.
if node = doc.SelectNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#", "RDF"); node != nil {
ftype = "rss"
fversion = [2]int{1, 1}
return
}
ftype = "unknown"
fversion = [2]int{0, 0}
return
}
开发者ID:mdaisuke,项目名称:go-pkg-rss,代码行数:36,代码来源:feed.go
示例2: addChild
func addChild(node *xmlx.Node, name string, attribs Attribs, contents string) *xmlx.Node {
child := xmlx.NewNode(xmlx.NT_ELEMENT)
child.Name.Local = name
child.Value = contents
for key, val := range attribs {
child.SetAttr(key, fmt.Sprintf("%v", val))
}
node.AddChild(child)
return child
}
开发者ID:Shader2006,项目名称:xdr2obj,代码行数:13,代码来源:export.go
示例3: getExtension
func getExtension(node *xmlx.Node) (Extension, bool) {
var extension Extension
if node.Name.Space != "" {
extension = Extension{Name: node.Name.Local, Value: node.GetValue()}
extension.Attrs = make(map[string]string)
extension.Childrens = make(map[string][]Extension, 0)
for _, x := range node.Attributes {
extension.Attrs[x.Name.Local] = x.Value
}
for _, y := range node.Children {
children, ok := getExtension(y)
if ok {
extension.Childrens[y.Name.Local] = append(extension.Childrens[y.Name.Local], children)
}
}
return extension, true
} else {
return extension, false
}
}
开发者ID:ronaldfoize,项目名称:go-pkg-rss,代码行数:20,代码来源:rss.go
示例4: getExtension
func getExtension(node *xmlx.Node) (extension Extension, ok bool) {
if node.Name.Space == "" {
return extension, false
}
extension = Extension{
Name: node.Name.Local,
Value: node.GetValue(),
Attrs: make(map[string]string),
Childrens: make(map[string][]Extension, 0),
}
for _, attr := range node.Attributes {
extension.Attrs[attr.Name.Local] = attr.Value
}
for _, child := range node.Children {
if ext, ok := getExtension(child); ok {
extension.Childrens[child.Name.Local] = append(extension.Childrens[child.Name.Local], ext)
}
}
return extension, true
}
开发者ID:hawx,项目名称:riviera,代码行数:24,代码来源:rss.go
示例5: readRss2
func (this *Feed) readRss2(doc *xmlx.Document) (err error) {
var foundChannels []*Channel
var ch *Channel
var i *Item
var n *xmlx.Node
var list, tl []*xmlx.Node
const ns = "*"
root := doc.SelectNode(ns, "rss")
if root == nil {
root = doc.SelectNode(ns, "RDF")
}
if root == nil {
return errors.New("Failed to find rss/rdf node in XML.")
}
channels := root.SelectNodes(ns, "channel")
for _, node := range channels {
ch = new(Channel)
foundChannels = append(foundChannels, ch)
ch.Title = node.S(ns, "title")
list = node.SelectNodes(ns, "link")
ch.Links = make([]Link, len(list))
for i, v := range list {
if v.Name.Space == "http://www.w3.org/2005/Atom" && v.Name.Local == "link" {
ch.Links[i].Href = v.As("", "href")
ch.Links[i].Rel = v.As("", "rel")
ch.Links[i].Type = v.As("", "type")
ch.Links[i].HrefLang = v.As("", "hreflang")
} else {
ch.Links[i].Href = v.GetValue()
}
}
ch.Description = node.S(ns, "description")
ch.Language = node.S(ns, "language")
ch.Copyright = node.S(ns, "copyright")
ch.ManagingEditor = node.S(ns, "managingEditor")
ch.WebMaster = node.S(ns, "webMaster")
ch.PubDate = node.S(ns, "pubDate")
ch.LastBuildDate = node.S(ns, "lastBuildDate")
ch.Docs = node.S(ns, "docs")
list = node.SelectNodes(ns, "category")
ch.Categories = make([]*Category, len(list))
for i, v := range list {
ch.Categories[i] = new(Category)
ch.Categories[i].Domain = v.As(ns, "domain")
ch.Categories[i].Text = v.GetValue()
}
if n = node.SelectNode(ns, "generator"); n != nil {
ch.Generator = Generator{}
ch.Generator.Text = n.GetValue()
}
ch.TTL = node.I(ns, "ttl")
ch.Rating = node.S(ns, "rating")
list = node.SelectNodes(ns, "hour")
ch.SkipHours = make([]int, len(list))
for i, v := range list {
ch.SkipHours[i] = v.I(ns, "hour")
}
list = node.SelectNodes(ns, "days")
ch.SkipDays = make([]int, len(list))
for i, v := range list {
ch.SkipDays[i] = days[v.GetValue()]
}
if n = node.SelectNode(ns, "image"); n != nil {
ch.Image.Title = n.S(ns, "title")
ch.Image.Url = n.S(ns, "url")
ch.Image.Link = n.S(ns, "link")
ch.Image.Width = n.I(ns, "width")
ch.Image.Height = n.I(ns, "height")
ch.Image.Description = n.S(ns, "description")
}
if n = node.SelectNode(ns, "cloud"); n != nil {
ch.Cloud = Cloud{}
ch.Cloud.Domain = n.As(ns, "domain")
ch.Cloud.Port = n.Ai(ns, "port")
ch.Cloud.Path = n.As(ns, "path")
ch.Cloud.RegisterProcedure = n.As(ns, "registerProcedure")
ch.Cloud.Protocol = n.As(ns, "protocol")
}
if n = node.SelectNode(ns, "textInput"); n != nil {
ch.TextInput = Input{}
ch.TextInput.Title = n.S(ns, "title")
ch.TextInput.Description = n.S(ns, "description")
ch.TextInput.Name = n.S(ns, "name")
ch.TextInput.Link = n.S(ns, "link")
}
//.........这里部分代码省略.........
开发者ID:ronaldfoize,项目名称:go-pkg-rss,代码行数:101,代码来源:rss.go
示例6: readAtom
func (this *Feed) readAtom(doc *xmlx.Document) (err error) {
ns := "http://www.w3.org/2005/Atom"
channels := doc.SelectNodes(ns, "feed")
var foundChannels []*Channel
var ch *Channel
var i *Item
var tn *xmlx.Node
var list []*xmlx.Node
for _, node := range channels {
ch = new(Channel)
foundChannels = append(foundChannels, ch)
ch.Title = node.S(ns, "title")
ch.LastBuildDate = node.S(ns, "updated")
ch.Id = node.S(ns, "id")
ch.Rights = node.S(ns, "rights")
list = node.SelectNodes(ns, "link")
ch.Links = make([]Link, len(list))
for i, v := range list {
ch.Links[i].Href = v.As("", "href")
ch.Links[i].Rel = v.As("", "rel")
ch.Links[i].Type = v.As("", "type")
ch.Links[i].HrefLang = v.As("", "hreflang")
}
if tn = node.SelectNode(ns, "subtitle"); tn != nil {
ch.SubTitle = SubTitle{}
ch.SubTitle.Type = tn.As("", "type")
ch.SubTitle.Text = tn.GetValue()
}
if tn = node.SelectNode(ns, "generator"); tn != nil {
ch.Generator = Generator{}
ch.Generator.Uri = tn.As("", "uri")
ch.Generator.Version = tn.As("", "version")
ch.Generator.Text = tn.GetValue()
}
if tn = node.SelectNode(ns, "author"); tn != nil {
ch.Author = Author{}
ch.Author.Name = tn.S("", "name")
ch.Author.Uri = tn.S("", "uri")
ch.Author.Email = tn.S("", "email")
}
list = node.SelectNodes(ns, "entry")
for _, item := range list {
i = new(Item)
i.Title = item.S(ns, "title")
i.Id = item.S(ns, "id")
i.PubDate = item.S(ns, "updated")
i.Description = item.S(ns, "summary")
links := item.SelectNodes(ns, "link")
for _, lv := range links {
if lv.As(ns, "rel") == "enclosure" {
enc := new(Enclosure)
enc.Url = lv.As("", "href")
enc.Type = lv.As("", "type")
i.Enclosures = append(i.Enclosures, enc)
} else {
lnk := new(Link)
lnk.Href = lv.As("", "href")
lnk.Rel = lv.As("", "rel")
lnk.Type = lv.As("", "type")
lnk.HrefLang = lv.As("", "hreflang")
i.Links = append(i.Links, lnk)
}
}
list = item.SelectNodes(ns, "contributor")
for _, cv := range list {
i.Contributors = append(i.Contributors, cv.S("", "name"))
}
list = item.SelectNodes(ns, "category")
for _, cv := range list {
cat := new(Category)
cat.Domain = ""
cat.Text = cv.As("", "term")
i.Categories = append(i.Categories, cat)
}
if tn = item.SelectNode(ns, "content"); tn != nil {
i.Content = new(Content)
i.Content.Type = tn.As("", "type")
i.Content.Lang = tn.S("xml", "lang")
i.Content.Base = tn.S("xml", "base")
i.Content.Text = tn.GetValue()
}
if tn = item.SelectNode(ns, "author"); tn != nil {
i.Author = Author{}
i.Author.Name = tn.S(ns, "name")
i.Author.Uri = tn.S(ns, "uri")
i.Author.Email = tn.S(ns, "email")
//.........这里部分代码省略.........
开发者ID:JalfResi,项目名称:go-pkg-rss,代码行数:101,代码来源:atom.go
示例7: readAtom
func (this *Feed) readAtom(doc *xmlx.Document) (err error) {
ns := "http://www.w3.org/2005/Atom"
channels := doc.SelectNodes(ns, "feed")
getChan := func(id, title string) *Channel {
for _, c := range this.Channels {
switch {
case len(id) > 0:
if c.Id == id {
return c
}
case len(title) > 0:
if c.Title == title {
return c
}
}
}
return nil
}
haveItem := func(ch *Channel, id, title, desc string) bool {
for _, item := range ch.Items {
switch {
case len(id) > 0:
if item.Id == id {
return true
}
case len(title) > 0:
if item.Title == title {
return true
}
case len(desc) > 0:
if item.Description == desc {
return true
}
}
}
return false
}
var ch *Channel
var i *Item
var tn *xmlx.Node
var list []*xmlx.Node
for _, node := range channels {
if ch = getChan(node.S(ns, "id"), node.S(ns, "title")); ch == nil {
ch = new(Channel)
this.Channels = append(this.Channels, ch)
}
ch.Title = node.S(ns, "title")
ch.LastBuildDate = node.S(ns, "updated")
ch.Id = node.S(ns, "id")
ch.Rights = node.S(ns, "rights")
list = node.SelectNodes(ns, "link")
ch.Links = make([]Link, len(list))
for i, v := range list {
ch.Links[i].Href = v.As("", "href")
ch.Links[i].Rel = v.As("", "rel")
ch.Links[i].Type = v.As("", "type")
ch.Links[i].HrefLang = v.As("", "hreflang")
}
if tn = node.SelectNode(ns, "subtitle"); tn != nil {
ch.SubTitle = SubTitle{}
ch.SubTitle.Type = tn.As("", "type")
ch.SubTitle.Text = tn.Value
}
if tn = node.SelectNode(ns, "generator"); tn != nil {
ch.Generator = Generator{}
ch.Generator.Uri = tn.As("", "uri")
ch.Generator.Version = tn.As("", "version")
ch.Generator.Text = tn.Value
}
if tn = node.SelectNode(ns, "author"); tn != nil {
ch.Author = Author{}
ch.Author.Name = tn.S("", "name")
ch.Author.Uri = tn.S("", "uri")
ch.Author.Email = tn.S("", "email")
}
itemcount := len(ch.Items)
list = node.SelectNodes(ns, "entry")
for _, item := range list {
if haveItem(ch, item.S(ns, "id"), item.S(ns, "title"), item.S(ns, "summary")) {
continue
}
i = new(Item)
i.Title = item.S(ns, "title")
i.Id = item.S(ns, "id")
i.PubDate = item.S(ns, "updated")
i.Description = item.S(ns, "summary")
links := item.SelectNodes(ns, "link")
//.........这里部分代码省略.........
开发者ID:jimt,项目名称:go-pkg-rss,代码行数:101,代码来源:atom.go
示例8: readRss2
func (this *Feed) readRss2(doc *xmlx.Document) (err error) {
days := make(map[string]int)
days["Monday"] = 1
days["Tuesday"] = 2
days["Wednesday"] = 3
days["Thursday"] = 4
days["Friday"] = 5
days["Saturday"] = 6
days["Sunday"] = 7
getChan := func(pubdate, title string) *Channel {
for _, c := range this.Channels {
switch {
case len(pubdate) > 0:
if c.PubDate == pubdate {
return c
}
case len(title) > 0:
if c.Title == title {
return c
}
}
}
return nil
}
var ch *Channel
var i *Item
var n *xmlx.Node
var list, tl []*xmlx.Node
const ns = "*"
root := doc.SelectNode(ns, "rss")
if root == nil {
root = doc.SelectNode(ns, "RDF")
}
if root == nil {
return errors.New("Failed to find rss/rdf node in XML.")
}
channels := root.SelectNodes(ns, "channel")
for _, node := range channels {
if ch = getChan(node.S(ns, "pubDate"), node.S(ns, "title")); ch == nil {
ch = new(Channel)
this.Channels = append(this.Channels, ch)
}
ch.Title = node.S(ns, "title")
list = node.SelectNodes(ns, "link")
ch.Links = make([]Link, len(list))
for i, v := range list {
ch.Links[i].Href = v.GetValue()
}
ch.Description = node.S(ns, "description")
ch.Language = node.S(ns, "language")
ch.Copyright = node.S(ns, "copyright")
ch.ManagingEditor = node.S(ns, "managingEditor")
ch.WebMaster = node.S(ns, "webMaster")
ch.PubDate = node.S(ns, "pubDate")
ch.LastBuildDate = node.S(ns, "lastBuildDate")
ch.Docs = node.S(ns, "docs")
list = node.SelectNodes(ns, "category")
ch.Categories = make([]*Category, len(list))
for i, v := range list {
ch.Categories[i] = new(Category)
ch.Categories[i].Domain = v.As(ns, "domain")
ch.Categories[i].Text = v.GetValue()
}
if n = node.SelectNode(ns, "generator"); n != nil {
ch.Generator = Generator{}
ch.Generator.Text = n.GetValue()
}
ch.TTL = node.I(ns, "ttl")
ch.Rating = node.S(ns, "rating")
list = node.SelectNodes(ns, "hour")
ch.SkipHours = make([]int, len(list))
for i, v := range list {
ch.SkipHours[i] = v.I(ns, "hour")
}
list = node.SelectNodes(ns, "days")
ch.SkipDays = make([]int, len(list))
for i, v := range list {
ch.SkipDays[i] = days[v.GetValue()]
}
if n = node.SelectNode(ns, "image"); n != nil {
ch.Image.Title = n.S(ns, "title")
ch.Image.Url = n.S(ns, "url")
ch.Image.Link = n.S(ns, "link")
ch.Image.Width = n.I(ns, "width")
ch.Image.Height = n.I(ns, "height")
ch.Image.Description = n.S(ns, "description")
//.........这里部分代码省略.........
开发者ID:ChimeraCoder,项目名称:go-pkg-rss,代码行数:101,代码来源:rss.go
示例9: readRssChannel
func readRssChannel(ns string, doc *xmlx.Document, node *xmlx.Node) *Channel {
ch := &Channel{
Title: node.S(ns, "title"),
Description: node.S(ns, "description"),
Language: node.S(ns, "language"),
Copyright: node.S(ns, "copyright"),
ManagingEditor: node.S(ns, "managingEditor"),
WebMaster: node.S(ns, "webMaster"),
PubDate: node.S(ns, "pubDate"),
LastBuildDate: node.S(ns, "lastBuildDate"),
Docs: node.S(ns, "docs"),
TTL: node.I(ns, "ttl"),
Rating: node.S(ns, "rating"),
}
for _, v := range node.SelectNodes(ns, "link") {
lnk := Link{}
if v.Name.Space == "http://www.w3.org/2005/Atom" && v.Name.Local == "link" {
lnk.Href = v.As("", "href")
lnk.Rel = v.As("", "rel")
lnk.Type = v.As("", "type")
lnk.HrefLang = v.As("", "hreflang")
} else {
lnk.Href = v.GetValue()
}
ch.Links = append(ch.Links, lnk)
}
for _, v := range node.SelectNodes(ns, "category") {
ch.Categories = append(ch.Categories, Category{
Domain: v.As(ns, "domain"),
Text: v.GetValue(),
})
}
if n := node.SelectNode(ns, "generator"); n != nil {
ch.Generator = Generator{
Text: n.GetValue(),
}
}
for _, v := range node.SelectNodes(ns, "hour") {
ch.SkipHours = append(ch.SkipHours, v.I(ns, "hour"))
}
for _, v := range node.SelectNodes(ns, "days") {
ch.SkipDays = append(ch.SkipDays, days[v.GetValue()])
}
if n := node.SelectNode(ns, "image"); n != nil {
ch.Image = Image{
Title: n.S(ns, "title"),
Url: n.S(ns, "url"),
Link: n.S(ns, "link"),
Width: n.I(ns, "width"),
Height: n.I(ns, "height"),
Description: n.S(ns, "description"),
}
}
if n := node.SelectNode(ns, "cloud"); n != nil {
ch.Cloud = Cloud{
Domain: n.As(ns, "domain"),
Port: n.Ai(ns, "port"),
Path: n.As(ns, "path"),
RegisterProcedure: n.As(ns, "registerProcedure"),
Protocol: n.As(ns, "protocol"),
}
}
if n := node.SelectNode(ns, "textInput"); n != nil {
ch.TextInput = Input{
Title: n.S(ns, "title"),
Description: n.S(ns, "description"),
Name: n.S(ns, "name"),
Link: n.S(ns, "link"),
}
}
list := node.SelectNodes(ns, "item")
if len(list) == 0 {
list = doc.SelectNodes(ns, "item")
}
for _, item := range list {
ch.Items = append(ch.Items, readRssItem(ns, item))
}
ch.Extensions = make(map[string]map[string][]Extension)
for _, v := range node.Children {
getExtensions(&ch.Extensions, v)
}
return ch
}
开发者ID:hawx,项目名称:riviera,代码行数:96,代码来源:rss.go
示例10: readRssItem
func readRssItem(ns string, item *xmlx.Node) *Item {
i := &Item{
Title: item.S(ns, "title"),
Description: item.S(ns, "description"),
Comments: item.S(ns, "comments"),
PubDate: item.S(ns, "pubDate"),
}
for _, v := range item.SelectNodes(ns, "link") {
if v.Name.Space == "http://www.w3.org/2005/Atom" && v.Name.Local == "link" {
i.Links = append(i.Links, Link{
Href: v.As("", "href"),
Rel: v.As("", "rel"),
Type: v.As("", "type"),
HrefLang: v.As("", "hreflang"),
})
} else {
i.Links = append(i.Links, Link{Href: v.GetValue()})
}
}
if n := item.SelectNode(ns, "author"); n != nil {
i.Author.Name = n.GetValue()
} else if n := item.SelectNode(ns, "creator"); n != nil {
i.Author.Name = n.GetValue()
}
if n := item.SelectNode(ns, "guid"); n != nil {
i.Guid = &Guid{Guid: n.GetValue(), IsPermaLink: n.As("", "isPermalink") == "true"}
}
for _, lv := range item.SelectNodes(ns, "category") {
i.Categories = append(i.Categories, Category{
Domain: lv.As(ns, "domain"),
Text: lv.GetValue(),
})
}
for _, lv := range item.SelectNodes(ns, "enclosure") {
i.Enclosures = append(i.Enclosures, Enclosure{
Url: lv.As(ns, "url"),
Length: lv.Ai64(ns, "length"),
Type: lv.As(ns, "type"),
})
}
if src := item.SelectNode(ns, "source"); src != nil {
i.Source = new(Source)
i.Source.Url = src.As(ns, "url")
i.Source.Text = src.GetValue()
}
for _, lv := range item.SelectNodes("http://purl.org/rss/1.0/modules/content/", "*") {
if lv.Name.Local == "encoded" {
i.Content = &Content{
Text: lv.String(),
}
break
}
}
i.Extensions = make(map[string]map[string][]Extension)
for _, lv := range item.Children {
getExtensions(&i.Extensions, lv)
}
return i
}
开发者ID:hawx,项目名称:riviera,代码行数:69,代码来源:rss.go
示例11: readAtomItem
func readAtomItem(ns string, item *xmlx.Node) *Item {
i := &Item{
Title: item.S(ns, "title"),
Id: item.S(ns, "id"),
PubDate: item.S(ns, "updated"),
Description: item.S(ns, "summary"),
}
for _, v := range item.SelectNodes(ns, "link") {
if v.As(ns, "rel") == "enclosure" {
i.Enclosures = append(i.Enclosures, Enclosure{
Url: v.As("", "href"),
Type: v.As("", "type"),
})
} else {
i.Links = append(i.Links, Link{
Href: v.As("", "href"),
Rel: v.As("", "rel"),
Type: v.As("", "type"),
HrefLang: v.As("", "hreflang"),
})
}
}
for _, v := range item.SelectNodes(ns, "contributor") {
i.Contributors = append(i.Contributors, v.S("", "name"))
}
for _, cv := range item.SelectNodes(ns, "category") {
i.Categories = append(i.Categories, Category{
Domain: "",
Text: cv.As("", "term"),
})
}
if tn := item.SelectNode(ns, "content"); tn != nil {
i.Content = &Content{
Type: tn.As("", "type"),
Lang: tn.S("xml", "lang"),
Base: tn.S("xml", "base"),
Text: tn.GetValue(),
}
}
if tn := item.SelectNode(ns, "author"); tn != nil {
i.Author = Author{
Name: tn.S(ns, "name"),
Uri: tn.S(ns, "uri"),
Email: tn.S(ns, "email"),
}
}
return i
}
开发者ID:hawx,项目名称:riviera,代码行数:54,代码来源:atom.go
示例12: readAtomChannel
func readAtomChannel(ns string, node *xmlx.Node) *Channel {
ch := &Channel{
Title: node.S(ns, "title"),
LastBuildDate: node.S(ns, "updated"),
Id: node.S(ns, "id"),
Rights: node.S(ns, "rights"),
}
for _, v := range node.SelectNodesDirect(ns, "link") {
ch.Links = append(ch.Links, Link{
Href: v.As("", "href"),
Rel: v.As("", "rel"),
Type: v.As("", "type"),
HrefLang: v.As("", "hreflang"),
})
}
if tn := node.SelectNode(ns, "subtitle"); tn != nil {
ch.SubTitle = SubTitle{
Type: tn.As("", "type"),
Text: tn.GetValue(),
}
}
if tn := node.SelectNode(ns, "generator"); tn != nil {
ch.Generator = Generator{
Uri: tn.As("", "uri"),
Version: tn.As("", "version"),
Text: tn.GetValue(),
}
}
if tn := node.SelectNode(ns, "author"); tn != nil {
ch.Author = Author{
Name: tn.S("", "name"),
Uri: tn.S("", "uri"),
Email: tn.S("", "email"),
}
}
for _, item := range node.SelectNodes(ns, "entry") {
ch.Items = append(ch.Items, readAtomItem(ns, item))
}
return ch
}
开发者ID:hawx,项目名称:riviera,代码行数:46,代码来源:atom.go
注:本文中的github.com/jteeuwen/go-pkg-xmlx.Node类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论