【问题标题】:Golang parse XML with nested nodes of the same name?Golang用同名的嵌套节点解析XML?
【发布时间】:2021-11-04 05:08:33
【问题描述】:

我需要解析xml代码,

<claims>
    <claim>
        <claim-text>ABC
            <claim-text>PQR</claim-text>
            <claim-text>Xyz
                <claim-text>A</claim-text>
                <claim-text>B</claim-text>
                <claim-text>C</claim-text>
            </claim-text>
        </claim-text>
    </claim>
    <claim>
        <claim-text>PPP
            <claim-text>ZZZ</claim-text>
            <claim-text>MMM</claim-text>
        </claim-text>
    </claim>

如何在所有声明文本中获取“声明”数组? 我正在尝试这个,但它没有给出声明文本中包含的任何文本。

type Result struct {
Claims  []Claim `xml:"claims>claim"`
}
type Claim struct{
  ClaimText []string `xml:"claim-text"` 
}

任何帮助将不胜感激。

【问题讨论】:

    标签: xml go parsing


    【解决方案1】:
    type Result struct {
        Claims []Claim `xml:"claim"`
    }
    
    type Claim struct {
        ClaimText []ClaimText `xml:"claim-text"`
    }
    
    type ClaimText struct {
        Value     string      `xml:",chardata"`
        ClaimText []ClaimText `xml:"claim-text"`
    }
    

    https://play.golang.org/p/uueAiwG84LH


    如果你想摆脱空白,你可以实现 unmarshaler 接口:

    func (t *ClaimText) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
        type T ClaimText
        if err := d.DecodeElement((*T)(t), &start); err != nil {
            return err
        }
    
        t.Value = strings.TrimSpace(t.Value)
        return nil
    }
    

    https://play.golang.org/p/2I1meeBm0pu

    【讨论】:

      【解决方案2】:

      看看这个online tool 生成以下结构:

      type Claims struct {
          XMLName xml.Name `xml:"claims"`
          Text    string   `xml:",chardata"`
          Claim   []struct {
              Text      string `xml:",chardata"`
              ClaimText struct {
                  Text      string `xml:",chardata"`
                  ClaimText []struct {
                      Text      string   `xml:",chardata"`
                      ClaimText []string `xml:"claim-text"`
                  } `xml:"claim-text"`
              } `xml:"claim-text"`
          } `xml:"claim"`
      } 
      
      

      【讨论】:

        猜你喜欢
        • 2015-10-05
        • 1970-01-01
        • 1970-01-01
        • 2011-01-30
        • 1970-01-01
        • 2021-04-23
        • 2015-03-31
        • 2018-12-21
        • 1970-01-01
        相关资源
        最近更新 更多