gpt4 book ai didi

xml - 在 GO 中解析 Xml 以获取标记中具有 ":"的属性

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

我想解析一个Xml文件的属性。它适用于任何“正常”属性,例如 <application name="AppName">

但是如果属性中有“:”,我就无法检索属性的值,例如 <application name:test="AppName">

这是我用来解析它的代码:

package main

import "fmt"
import "encoding/xml"

type Application struct {
Event Event `xml:"application"`
Package string `xml:"package,attr"`
}

type Event struct {
IsValid string `xml:"test:isValid,attr"`
}

var doc = []byte(`<?xml version="1.0" encoding="utf-8" standalone="no"?>
<application package="leNomDuPackage">
<event test:isValid="true">
</application>
</manifest>`)

func main() {
application := Application{}
xml.Unmarshal(doc, &application)

fmt.Println("Application: ", application)
fmt.Println("isValid:", application.Event)
}

您也可以在 Golang Playground 上找到它:[ https://play.golang.org/p/R6H80xPezhm

我想检索 isValid 的值属性。

目前,我收到了该错误消息,但无法解决。

struct field tag xml:"test\:isValid,attr not compatible with reflect.StructTag.Get: bad syntax for struct tag value

我也尝试了以下值

type Event struct {
IsValid string `xml:"test isValid,attr`
}

type Event struct {
IsValid string `xml:"test\:isValid,attr`
}

但效果不佳。

最佳答案

您可以省略 "test:"标签定义中的前缀。只需确保您的 XML 有效,您的 XML 没有 <event> 的结束标记。并且有一个无与伦比的结束标签 </manifest> .您还缺少标记定义中的右引号。

型号:

type Application struct {
Event Event `xml:"event"`
Package string `xml:"package,attr"`
}

type Event struct {
IsValid string `xml:"isValid,attr"`
}

一个有效的 XML 示例:

var doc = `
<application package="leNomDuPackage">
<event test:isValid="true" />
</application>`

解析它的代码:

application := Application{}
err := xml.Unmarshal([]byte(doc), &application)
if err != nil {
fmt.Println(err)
}

fmt.Printf("Application: %#v\n", application)

输出(在 Go Playground 上尝试):

Application: main.Application{Event:main.Event{IsValid:"true"},
Package:"leNomDuPackage"}

请注意,如果您有多个名称相同但前缀不同的属性,例如这个例子:

var doc = `
<application package="leNomDuPackage">
<event test:isValid="true" test2:isValid="false" />
</application>`

然后您可以在标记值中添加 namespace 前缀,名称之间用空格分隔,如下所示:

type Event struct {
IsValid1 string `xml:"test isValid,attr"`
IsValid2 string `xml:"test2 isValid,attr"`
}

解析代码是一样的。输出(在 Go Playground 上尝试):

Application: main.Application{Event:main.Event{IsValid1:"true", 
IsValid2:"false"}, Package:"leNomDuPackage"}

关于xml - 在 GO 中解析 Xml 以获取标记中具有 ":"的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51559581/

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