golang 中的 xml 解析(我想单独访问详细信息中的每个元素)

标签 xml parsing go nested

我要解析的 XML 数据是:

<cm>
<id>TASK_DATA_RES</id>
<task>
    <swid>3873-0</swid>
     <detail>
    <![CDATA[<execute name="EXECUTE">      
    <swid>3873</swid>
    <tskid>MONITOR0</tskid>
    <file_name>DiskStatusCheck.ps1</file_name>
    <param>/metricName::metric_3873_48 /metric::DiskStatusCheck /warn::1 /critical::1 /alert::1 /params::E:</param>
    <timeout></timeout>
    <user>test\\test</user>
    <passwd>test</passwd>   <path>https://mspnocsupport.com/downloadScript.doaction=downloadAgent&fileName=DiskStatusCheck.ps1&version=5.00</path>
    <pathtype>local</pathtype>
    <size>9147</size>
    <encoded_size>9147</encoded_size>
    <type>POWERSHELL</type>
    <outputdir></outputdir>
    <outputfile></outputfile>
    <alert>false</alert>
    <regkeypath></regkeypath>
    <regkeyval></regkeyval>
    <process></process>
    <service></service>
    <version>5.00</version>
    <asuser_flag>0</asuser_flag>
    </execute>]]>
    </detail>
</task>
</cm>

解析此类 XML 文档的相应结构:

type detail struct{
    Name string `xml:"detail>name"`
    Swid string `xml:"detail>swid"` 
    Tskid string `xml:"detail>tskid"`
    File string `xml:"detail>file"`
    Param string `xml:"detail>params"`
    User string `xml:"detail>user"`   
    Passwd string `xml:"detail>passwd"`
    Path string `xml:"detail>path"`
    Pathtype string `xml:"detail>pathtype"`
    Size int `xml:"detail>size"`
    Encode string `xml:"detail>encode"`
    Type string `xml:"detail>type"`
    Outputdir string `xml:"detail>outputdir"`
    Outputfile string `xml:"detail>outputfile"`
    Alert string `xml:"detail>alert"`
    Regkeyval string `xml:"detail>regkeyval"`
    Process string `xml:"detail>process"`   
    Service string `xml:"detail>service"`
    Version float64 `xml:"detail>version"`
    Asuser_flag string `xml:"detail>asuser_flag"`
}

type task struct{
    Swid string `xml:"swid"`
    Details []detail `xml:"Details>detail"`
}
type task_data_res struct{
    ID    string `xml:"id"`
    //Swid  string `xml:"task>swid"`
    Tasks []task `xml:"Tasks>task"` 
}
v := task_data_res{}
err := xml.Unmarshal([]byte(*dxml), &v)
if err != nil {
    fmt.Printf("error: %v", err)
    return
}

之后我想打印详细信息结构的单个值,例如名称、Swid 等。

最佳答案

我已尝试解析您的 xml,您可以在 http://play.golang.org/p/1UCaGYetzo 找到完整的解决方案

关于golang 中的 xml 解析(我想单独访问详细信息中的每个元素),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33544879/

相关文章:

php - 如何避免多次重新加载 XML 文档?

java - 如何获取 AST 中节点的完全限定名称?

performance - 根据前一个 slice 创建一个新 slice ,没有给定值

go - 在其他父方法中使用重写的父方法

iphone - 使用 CHCSVParser 的基础介绍

戈兰 : "compress/flate" module can't decompress valid deflate compressed HTTP body

java - ImageView.setImageResource 返回 NullPointerException

xml - 使用 Go 并行读取多个 URL

java - HTTP 状态 500 错误实例化 servlet 类

c - 如何捕获生成的解析器中语法错误的行号