首頁 > 後端開發 > Golang > 如何在Go中不使用XPath有效率地遍歷XML資料?

如何在Go中不使用XPath有效率地遍歷XML資料?

Barbara Streisand
發布: 2024-11-29 06:57:10
原創
463 人瀏覽過

How Can I Efficiently Traverse XML Data in Go Without Using XPath?

Go 中的XML 資料遍歷

問題:

問題:

問題:

XML 資料通常會帶來挑戰無需事先了解XPath 即可存取特定元素。 xml.Unmarshal方法在這方面有局限性,需要使用者指定確切的路徑來獲取資料。

解決方案:
type Node struct {
    XMLName xml.Name
    Content []byte `xml:",innerxml"`
    Nodes   []Node `xml:",any"`
}
登入後複製

要靈活地遍歷XML數據,我們可以利用遞歸數據結構和簡單的步行函數。

遞歸資料結構:

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

在此結構中,每個Node 代表XML 文件中的一個元素,包含其名稱、內部XML 內容(對於非巢狀元素)和子節點切片。

步行函數:

    遞歸步行函數遍歷節點樹,為每個遇到的節點呼叫提供的函數 f。
  1. 用法:
  2. 遍歷 XML 文件並相應地處理其元素:

將 XML 資料解組到 Node 結構中。

定義篩選函數 f,指定處理節點的條件(例如,基於元素名稱或內容)。

以根節點和濾波函數作為參數呼叫 walk 函數。
content := Node{}
if err := xml.Unmarshal([]byte(rawXML), &content); err != nil {
    // Handle error
}

walk(content.Nodes, func(n Node) bool {
    fmt.Println(n.XMLName.Local)
    return true
})
登入後複製

content
p
animal
p
dog
p
birds
p
p
animal
p
登入後複製
範例:以下程式碼遍歷問題中的XML 文件,列印其中的元素名稱順序:輸出:

以上是如何在Go中不使用XPath有效率地遍歷XML資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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