登录
首页 >  Golang >  Go问答

如何用冒号解组 XML 属性?

来源:Golang技术栈

时间:2023-04-17 07:51:33 387浏览 收藏

哈喽!今天心血来潮给大家带来了《如何用冒号解组 XML 属性?》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到golang,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

我正在使用的一些 SVG/XML 文件在属性名称中有破折号和冒号 - 例如:

<g><a target='_blank'  href='https://www.17golang.com/gourl/?redirect=MDAwMDAwMDAwML57hpSHp6VpkrqbYLx2eayza4KafaOkbLS3zqSBrJvPsa5_0Ia6sWuR4Juaq6t9nq5roGCUgXpusdyfpJl5fdnHe6nQhNCyr5q5fZqrq32ev4CNYH99emi_t9FojnaA3bJme86Fzc9th7qYnK-slJ6ys4acfpCGar7d0XU' rel='nofollow'>...</a>
</g>

我试图弄清楚如何使用golang'encoding/xml包解组这些属性。虽然虚线属性有效,但带有冒号的属性无效:

[见这里的一个活生生的例子]

package main

import (
    "encoding/xml"
    "fmt"
)

var data = `
<g><a target='_blank'  href='https://www.17golang.com/gourl/?redirect=MDAwMDAwMDAwML57hpSHp6VpkrqbYLx2eayza4KafaOkbLS3zqSBrJvPsa5_0Ia6sWuR4Juaq6t9nq5roGCUgXpusdyfpJl5fdnHe6nQhNCyr5q5fZqrq32ev4CNYH99emi_t9FojnaA3bJme86Fzc9th7qYnK-slJ6ys4acfpCGar7d0XU' rel='nofollow'>lala</a>
</g>
`

type Anchor struct {
    DataBind  int    `xml:"data-bind,attr"`  // this works
    XlinkHref string `xml:"xlink:href,attr"` // this fails
}

type Group struct {
    A Anchor `xml:"a"`
}

func main() {
    group := Group{}
    _ = xml.Unmarshal([]byte(data), &group)

    fmt.Printf("%#v\n", group.A)
}

这些看似合法的属性名称;知道如何提取xlink:href吗?谢谢。

正确答案

您的示例片段并不完全正确,因为它不包含前缀的[XML 命名空间](http://www.w3.org/TR/REC-xml- names/)绑定。xlink:你可能想要的是:

<g xmlns:xlink="http://www.w3.org/1999/xlink"><a target='_blank'  href='https://www.17golang.com/gourl/?redirect=MDAwMDAwMDAwML57hpSHp6VpkrqbYLx2eayza4KafaOkbLS3zqSBrJvPsa5_0Ia6sWuR4Juaq6t9nq5roGCUgXpusdyfpJl5fdnHe6nQhNCyr5q5fZqrq32ev4CNYH99emi_t9FojnaA3bJme86Fzc9th7qYnK-slJ6ys4acfpCGar7d0XU' rel='nofollow'>lala</a>
</g>

您可以使用命名空间 URL 解组此属性:

XlinkHref string `xml:"http://www.w3.org/1999/xlink href,attr"`

是带有命名空间修复的示例程序的更新副本。

理论要掌握,实操不能落!以上关于《如何用冒号解组 XML 属性?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表