当前位置: 首页 > 面试题库 >

Golang:如何用冒号解组XML属性?

洪俊捷
2023-03-14
问题内容

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

<g>
  <a xlink:href="http://example.com" data-bind="121">...</a>
</g>

我正在尝试弄清楚如何使用golangencoding/xml软件包对这些属性进行编组。虽然虚线属性有效,但带有冒号的属性不起作用:

[ 请参阅此处的实时示例 ]

package main

import (
    "encoding/xml"
    "fmt"
)

var data = `
<g>
    <a xlink:href="http://example.com" data-bind="121">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名称空间绑定xlink:。您可能想要的是:

<g xmlns:xlink="http://www.w3.org/1999/xlink">
  <a xlink:href="http://example.com" data-bind="121">lala</a>
</g>

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

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

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



 类似资料:
  • 问题内容: 有没有一种方法可以解组具有动态属性的XML标签(我不知道每次都会获得哪些属性)。 也许尚不支持。请参阅问题3633:encoding / xml:支持收集所有属性 就像是 : 问题答案: 您需要实现自己的XMLUnmarshaler 输出 http://play.golang.org/p/9ZrpIT32o_

  • 问题内容: 我有这样的XML结构: 我不知道如何收集SubItemField元素的值和属性,我的代码是这样的: 我需要属性和值,但是获取我知道的值的唯一方法就是使用 而不是我的自定义类型。我正在使用xml.Unmarshal btw。 任何想法? 谢谢。 问题答案: 我想出了如何做到这一点,我只需要在结构中添加一个匹配的新属性即可,如下所示: 我希望这可以帮助某人,因为没有相关文档或示例。

  • 问题内容: 场景:我正在尝试解析一个XML结构,但我不知道如何在xml属性值包含文本和更多嵌套值的情况下建立结构。所有其他属性都已正确设置,我不确定是否需要获取源的值并创建一个单独的解析器来检索元素的值。 编辑: 我正在尝试将源解析为以下形式的字符串:你好%{first_name}%{last_name} 用当前结构解组xml字符串将返回一个空结构 使用innerxml的@plato将源设置为:

  • 问题内容: 如果我有冒号分隔的xml标签(例如),哪个库提供了简单的解析和值操作?我要寻找什么? 问题答案: 在冒号之前是一个 命名空间前缀 ,并且应该有一个属性是相同元件或它的封闭元件中较高其中相关联的一个上 的命名空间URI 的前缀。所有标准Java XML技术都支持名称空间(JRE随附的SAX,DOM和StAX以及JDOM和XOM之类的第三方库),您需要记住的一点是,通常使用名称空间URI引

  • 如果我有冒号分隔的xml标签,比如

  • 问题内容: 假设以下xml元素具有属性和浮点值: 为了解组它,我应该如何定义我的结构? XMLName属性的用法使我感到困惑。什么时候应该将其放置在结构中,何时将其作为标签包装? 问题答案: 在下面,您可以找到解组给定数据的代码。 在删除空格之前,无法正确解组浮点值。 可以使用“,chardata”注释引用标记的内容。 您无需在结构中指定字段,只要它不模糊应使用哪种结构即可。