xml parsing in golang (i want to access each element in the details individually )

huangapple go评论168阅读模式
英文:

xml parsing in golang (i want to access each element in the details individually )

问题

我现在为您翻译以下内容:

我想要解析的XML数据是:

  1. <cm>
  2. <id>TASK_DATA_RES</id>
  3. <task>
  4. <swid>3873-0</swid>
  5. <detail>
  6. <![CDATA[<execute name="EXECUTE">
  7. <swid>3873</swid>
  8. <tskid>MONITOR0</tskid>
  9. <file_name>DiskStatusCheck.ps1</file_name>
  10. <param>/metricName::metric_3873_48 /metric::DiskStatusCheck /warn::1 /critical::1 /alert::1 /params::E:</param>
  11. <timeout></timeout>
  12. <user>test\\test</user>
  13. <passwd>test</passwd> <path>https://mspnocsupport.com/downloadScript.doaction=downloadAgent&amp;fileName=DiskStatusCheck.ps1&amp;version=5.00</path>
  14. <pathtype>local</pathtype>
  15. <size>9147</size>
  16. <encoded_size>9147</encoded_size>
  17. <type>POWERSHELL</type>
  18. <outputdir></outputdir>
  19. <outputfile></outputfile>
  20. <alert>false</alert>
  21. <regkeypath></regkeypath>
  22. <regkeyval></regkeyval>
  23. <process></process>
  24. <service></service>
  25. <version>5.00</version>
  26. <asuser_flag>0</asuser_flag>
  27. </execute>]]>
  28. </detail>
  29. </task>
  30. </cm>

相应的结构用于解析这样的XML文档:

  1. type detail struct{
  2. Name string `xml:"detail>name"`
  3. Swid string `xml:"detail>swid"`
  4. Tskid string `xml:"detail>tskid"`
  5. File string `xml:"detail>file"`
  6. Param string `xml:"detail>params"`
  7. User string `xml:"detail>user"`
  8. Passwd string `xml:"detail>passwd"`
  9. Path string `xml:"detail>path"`
  10. Pathtype string `xml:"detail>pathtype"`
  11. Size int `xml:"detail>size"`
  12. Encode string `xml:"detail>encode"`
  13. Type string `xml:"detail>type"`
  14. Outputdir string `xml:"detail>outputdir"`
  15. Outputfile string `xml:"detail>outputfile"`
  16. Alert string `xml:"detail>alert"`
  17. Regkeyval string `xml:"detail>regkeyval"`
  18. Process string `xml:"detail>process"`
  19. Service string `xml:"detail>service"`
  20. Version float64 `xml:"detail>version"`
  21. Asuser_flag string `xml:"detail>asuser_flag"`
  22. }
  23. type task struct{
  24. Swid string `xml:"swid"`
  25. Details []detail `xml:"Details>detail"`
  26. }
  27. type task_data_res struct{
  28. ID string `xml:"id"`
  29. Tasks []task `xml:"Tasks>task"`
  30. }
  31. v := task_data_res{}
  32. err := xml.Unmarshal([]byte(*dxml), &v)
  33. if err != nil {
  34. fmt.Printf("error: %v", err)
  35. return
  36. }

之后,我想要打印Detail结构的各个值,例如name、Swid等。

英文:

The XML data that i want to parse is:

  1. &lt;cm&gt;
  2. &lt;id&gt;TASK_DATA_RES&lt;/id&gt;
  3. &lt;task&gt;
  4. &lt;swid&gt;3873-0&lt;/swid&gt;
  5. &lt;detail&gt;
  6. &lt;![CDATA[&lt;execute name=&quot;EXECUTE&quot;&gt;
  7. &lt;swid&gt;3873&lt;/swid&gt;
  8. &lt;tskid&gt;MONITOR0&lt;/tskid&gt;
  9. &lt;file_name&gt;DiskStatusCheck.ps1&lt;/file_name&gt;
  10. &lt;param&gt;/metricName::metric_3873_48 /metric::DiskStatusCheck /warn::1 /critical::1 /alert::1 /params::E:&lt;/param&gt;
  11. &lt;timeout&gt;&lt;/timeout&gt;
  12. &lt;user&gt;test\\test&lt;/user&gt;
  13. &lt;passwd&gt;test&lt;/passwd&gt; &lt;path&gt;https://mspnocsupport.com/downloadScript.doaction=downloadAgent&amp;fileName=DiskStatusCheck.ps1&amp;version=5.00&lt;/path&gt;
  14. &lt;pathtype&gt;local&lt;/pathtype&gt;
  15. &lt;size&gt;9147&lt;/size&gt;
  16. &lt;encoded_size&gt;9147&lt;/encoded_size&gt;
  17. &lt;type&gt;POWERSHELL&lt;/type&gt;
  18. &lt;outputdir&gt;&lt;/outputdir&gt;
  19. &lt;outputfile&gt;&lt;/outputfile&gt;
  20. &lt;alert&gt;false&lt;/alert&gt;
  21. &lt;regkeypath&gt;&lt;/regkeypath&gt;
  22. &lt;regkeyval&gt;&lt;/regkeyval&gt;
  23. &lt;process&gt;&lt;/process&gt;
  24. &lt;service&gt;&lt;/service&gt;
  25. &lt;version&gt;5.00&lt;/version&gt;
  26. &lt;asuser_flag&gt;0&lt;/asuser_flag&gt;
  27. &lt;/execute&gt;]]&gt;
  28. &lt;/detail&gt;
  29. &lt;/task&gt;
  30. &lt;/cm&gt;

The corresponding structure to parse such XML documents:

  1. type detail struct{
  2. Name string `xml:&quot;detail&gt;name&quot;`
  3. Swid string `xml:&quot;detail&gt;swid&quot;`
  4. Tskid string `xml:&quot;detail&gt;tskid&quot;`
  5. File string `xml:&quot;detail&gt;file&quot;`
  6. Param string `xml:&quot;detail&gt;params&quot;`
  7. User string `xml:&quot;detail&gt;user&quot;`
  8. Passwd string `xml:&quot;detail&gt;passwd&quot;`
  9. Path string `xml:&quot;detail&gt;path&quot;`
  10. Pathtype string `xml:&quot;detail&gt;pathtype&quot;`
  11. Size int `xml:&quot;detail&gt;size&quot;`
  12. Encode string `xml:&quot;detail&gt;encode&quot;`
  13. Type string `xml:&quot;detail&gt;type&quot;`
  14. Outputdir string `xml:&quot;detail&gt;outputdir&quot;`
  15. Outputfile string `xml:&quot;detail&gt;outputfile&quot;`
  16. Alert string `xml:&quot;detail&gt;alert&quot;`
  17. Regkeyval string `xml:&quot;detail&gt;regkeyval&quot;`
  18. Process string `xml:&quot;detail&gt;process&quot;`
  19. Service string `xml:&quot;detail&gt;service&quot;`
  20. Version float64 `xml:&quot;detail&gt;version&quot;`
  21. Asuser_flag string `xml:&quot;detail&gt;asuser_flag&quot;`
  22. }
  23. type task struct{
  24. Swid string `xml:&quot;swid&quot;`
  25. Details []detail `xml:&quot;Details&gt;detail&quot;`
  26. }
  27. type task_data_res struct{
  28. ID string `xml:&quot;id&quot;`
  29. //Swid string `xml:&quot;task&gt;swid&quot;`
  30. Tasks []task `xml:&quot;Tasks&gt;task&quot;`
  31. }
  32. v := task_data_res{}
  33. err := xml.Unmarshal([]byte(*dxml), &amp;v)
  34. if err != nil {
  35. fmt.Printf(&quot;error: %v&quot;, err)
  36. return
  37. }

After that i want to print individual value of Detail structure such as name,Swid etc.

答案1

得分: -1

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

英文:

I have tried to parse your xml, you can find complete solution at http://play.golang.org/p/1UCaGYetzo

huangapple
  • 本文由 发表于 2015年11月5日 20:43:54
  • 转载请务必保留本文链接:https://go.coder-hub.com/33544879.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定