首頁 > 後端開發 > Golang > 如何在Golang中高效率遍歷XML資料?

如何在Golang中高效率遍歷XML資料?

DDD
發布: 2024-11-29 12:23:13
原創
842 人瀏覽過

How to Efficiently Traverse XML Data in Golang?

在 Golang 中遍歷 XML 數據

要在 Golang 中遍歷 XML 數據,可以透過構造遞歸結構體並使用 walk 函數來利用普通編碼/xml方法.

結構定義與行走函數

type Node struct {
    XMLName xml.Name
    Content []byte `xml:",innerxml"`
    Nodes   []Node `xml:",any"`
}

func walk(nodes []Node, f func(Node) bool) {
    for _, n := range nodes {
        if f(n) {
            walk(n.Nodes, f)
        }
    }
}
登入後複製

範例用法

考慮以下XML:

<content>
    <p>this is content area</p>
    <animal>
        <p>This id dog</p>
        <dog>
           <p>tommy</p>
        </dog>
    </animal>
    <birds>
        <p>this is birds</p>
        <p>this is birds</p>
    </birds>
    <animal>
        <p>this is animals</p>
    </animal>
</content>
登入後複製

遍歷XML 並處理每個節點及其子節點:

  1. 將XML解組為結構體:

    var content Node
    if err := xml.Unmarshal(xmlData, &content); err != nil {
     // handle error
    }
    登入後複製
  2. 使用walk 函數遍歷結構體:

    walk(content.Nodes, func(n Node) bool {
     // Process the node or traverse its child nodes here
     fmt.Printf("Node: %s\n", n.XMLName.Local)
     return true
    })
    登入後複製

帶屬性的增強版本

對於有屬性的節點,這裡有一個增強的version:

type Node struct {
    XMLName xml.Name
    Attrs   []xml.Attr `xml:",any,attr"`
    Content []byte     `xml:",innerxml"`
    Nodes   []Node     `xml:",any"`
}

func (n *Node) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
    n.Attrs = start.Attr
    type node Node

    return d.DecodeElement((*node)(n), &start)
}
登入後複製

這允許存取節點處理邏輯中的屬性。

以上是如何在Golang中高效率遍歷XML資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板