gpt4 book ai didi

xml - 解析 xml(来自 Oracle Agile)返回 nil

转载 作者:行者123 更新时间:2023-12-01 22:17:07 24 4
gpt4 key购买 nike

我有一个我试图解析的例子。我可以得到 <Documents>但无法获取 <ChangeOrders> .我在这里结合了我在网站上的其他几个问题中看到的内容,特别是这些:
Unmarshaling XML in Go , golang xml Unmarshal , Golang XML parse

以下是我到目前为止所写的内容:

package main

import (
"bytes"
"encoding/json"
"encoding/xml"
"fmt"
"log"
)

type AgileData struct {
Documents []Document `xml: "AgileData>Documents"`
ChangeOrder ChangeOrder `xml: "AgileData>ChangeOrders"`
}

type ChangeOrder struct {
CoverPage CoverPage `xml:"CoverPage"`
}

type CoverPage struct {
Number string `xml:"Number"`
}

type Document struct {
TitleBlock TitleBlock `xml:"TitleBlock"`
Attachments []Attachments `xml:"Attachments"`
}

type TitleBlock struct {
Number string `xml:"Number"`
LifecyclePhase string `xml:"LifecyclePhase"`
Rev string `xml:"Rev"`
EffectivityDate string `xml:"EffectivityDate"`
}

type Attachments struct {
FileName string `xml:"FileName"`
EFD string `xml:"List01"`
}

func main() {
agile_xml := `
<AgileData xmlns="http://www.oracle.com/webfolder/technetwork/xml/plm/2016/09/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xsi:schemaLocation="http://www.oracle.com/webfolder/technetwork/xml/plm/2016/09/ http://www.oracle.com/webfolder/technetwork/xml/plm/2016/09/aXML.xsd">
<ChangeOrders>
<CoverPage>
<Number>C0000001</Number>
</CoverPage>
</ChangeOrders>
<Documents>
<TitleBlock>
<Number>D00000001</Number>
<LifecyclePhase>Published</LifecyclePhase>
<Rev>001 C00000001</Rev>
</TitleBlock>
<Attachments>
<FileName>some-file.docx</FileName>
<List01>PDF with banners</List01>
</Attachments>
</Documents>
<Documents>
<TitleBlock>
<Number>D00000002</Number>
<LifecyclePhase>Published</LifecyclePhase>
<Rev>001 C00000001</Rev>
</TitleBlock>
<Attachments>
<FileName>some-other-file.docx</FileName>
<List01>No distribution</List01>
</Attachments>
</Documents>
</AgileData>
`

xmlReader := bytes.NewReader([]byte(agile_xml))
yourAgileData := new(AgileData)
if err := xml.NewDecoder(xmlReader).Decode(yourAgileData); err != nil {
log.Panic(err.Error())
}

printX(yourAgileData)
}

func printX(x interface{}) (err error) {
var xBytes []byte
xBytes, err = json.MarshalIndent(x, "", " ")
if err != nil {
return
}
fmt.Println(string(xBytes))
return
}

Go playground link

如果你运行它,我会在 Documents[] 中取回数据, 但是 ChangeOrder为空白。我不确定我错过了什么。
"ChangeOrder": {
"CoverPage": {
"Number": ""
}
}

额外问题:为什么去 vert 提示这些线?
    Documents   []Document  `xml: "AgileData>Documents"`
ChangeOrder ChangeOrder `xml: "AgileData>ChangeOrders"`

如果我删除“xml:”和“AgileData..”之间的空格,警告就会消失,但 Documents[] 数组开始返回空。

最佳答案

删除根级别标签:

    Documents   []Document  `xml:"Documents"`
ChangeOrder ChangeOrder `xml:"ChangeOrders"`

XML 解码器假定文档元素对应于您将其解码到的结构。所以实际的 XML 元素/结构字段匹配从文档元素开始。

关于xml - 解析 xml(来自 Oracle Agile)返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58863801/

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