在元素标签 Golang 中解组 xml 包含“:”

Unmarshall xml containing ":" inside element tag Golang

我已经开始解析 xml 文件。但是我在解组以下元素时遇到问题:

    <Example>
    
        <xhtml:p>
            Some paragraph text
        </xhtml:p>
        <xhtml:div>
          Some div text
        </xhtml:div>
    </Example>

我想提取 xhtml:p 和 xhtml:div

中的文本

我写了下面的代码

package main

import (
    "fmt"
    "encoding/xml"
)

type Example struct{
    XMLName xml.Name `xml:"Example"`
    Paragraphs []string `xml:"xhtml:p"`
    Divs []string `xml:"xhtml:div"`
}

func main() {
    x:= []byte(`
      <Example>
        <pr>hello pr</pr>
        <xhtml:p>
            Some paragraph text
        </xhtml:p>
        <xhtml:div>
          Some div text
        </xhtml:div>
    </Example>
    `)

    var a Example
    xml.Unmarshal(x,&a)
    fmt.Println(a)
}

然而,当我打印 a 时,我得到了 ParagraphsDivs 的空切片。 知道我做错了什么吗?

从结构标签中省略标签名称spaces,它将起作用:

type Example struct {
    XMLName    xml.Name `xml:"Example"`
    Paragraphs []string `xml:"p"`
    Divs       []string `xml:"div"`
}

通过此更改,输出为(在 Go Playground 上尝试):

{{ Example} [
            Some paragraph text
        ] [
          Some div text
        ]}

如果您确实要指定名称space,则必须将其添加到带有 space 的结构标记中,而不是冒号:

type Example struct {
    XMLName    xml.Name `xml:"Example"`
    Paragraphs []string `xml:"xhtml p"`
    Divs       []string `xml:"xhtml div"`
}

这将给出相同的输出。在 Go Playground.

上试试

参见相关问题:Parse Xml in GO for atttribute with ":" in tag