gpt4 book ai didi

xml - 在 Go 中解析 XML 时处理命名空间

转载 作者:IT王子 更新时间:2023-10-29 01:18:53 26 4
gpt4 key购买 nike

我正在尝试在 Go 中解析一段 if XML:

package main

import (
"encoding/xml"
"fmt"
)

type XML struct {
Foo string `xml:"foo"`
}

func main() {
rawXML := []byte(`
<xml>
<foo>A</foo>
<ns:foo>B</ns:foo>
</xml>`)

x := new(XML)
xml.Unmarshal(rawXML, x)
fmt.Printf("foo: %s\n", x.Foo)
}

这个输出:

foo: B

虽然我预计它会产生:

foo: A

如何获取第一个 foo 标签(即没有 namespace 的标签)的内容?

最佳答案

我不认为 xml 解码器可以指定一个元素不应该有带有结构标签的命名空间。但我知道它可以为您检索有关命名空间的信息,然后您可以在之后对数据进行后处理以获得相同的结果:

package main

import (
"encoding/xml"
"fmt"
)

type Foo struct {
XMLName xml.Name
Data string `xml:",chardata"`
}

type XML struct {
Foo []Foo `xml:"foo"`
}

func main() {
rawXML := []byte(`
<xml>
<foo>A</foo>
<ns:foo>B</ns:foo>
</xml>`)

x := new(XML)
xml.Unmarshal(rawXML, x)
//fmt.Printf("foo: %#v\n", x)
for _, el := range x.Foo {
if el.XMLName.Space == "" {
fmt.Printf("non namespaced foo %q", el.Data)
}
}
}

http://play.golang.org/p/aDEFPmHPc0

关于xml - 在 Go 中解析 XML 时处理命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14145864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com