猿问

xml.Unmarshal 错误:预期元素类型 <dict> 但有 <plist>

我尝试使用“encoding/xml”包的 xml.Unmarshal 解组 XML 文件。


XML 文件如下所示:


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">

<dict>

    <key>frames</key>

    <dict>

        <key>0</key>

        <dict>

            <key>frame</key>

            <string>{{0, 0}, {81, 145}}</string>

            <key>offset</key>

            <string>{0, 0}</string>

            <key>rotated</key>

            <false/>

            <key>sourceColorRect</key>

            <string>{{0, 0}, {80, 145}}</string>

            <key>sourceSize</key>

            <string>{81, 145}</string>

            <key>aliases</key>

            <array>


            </array>

        </dict>

        <key>1</key>

我定义了两个结构:


// types for createfont command

type Characters struct {

    XMLName xml.Name `xml:"dict"`

    Char []string `xml:"key"`

}


type Result struct {

    Plist string `xml:"plist"`

    XMLName xml.Name `xml:"dict"`

    Keys []string `xml:"key"`

    Chars []Characters `xml:"dict"`

}

并用这个解组:


v := Result{}

err = xml.Unmarshal([]byte(data), &v)

if err != nil {

    fmt.Printf("error: %v", err)

    return

} else {

    fmt.Println("Result",v)

}

结果我得到:


error: expected element type <dict> but have <plist>

如果我删除 XML 文件和结构中的 plist 行,它就可以正常工作。


我该怎么写,才能让它进来?


泛舟湖上清波郎朗
浏览 368回答 1
1回答

梵蒂冈之花

XMLName结构中字段的顺序无关紧要。解组只发生在字段名称和标签上,而不是顺序。通过XMLName在类型中的任何位置声明整个类型应该属于/在该 XML 元素内。
随时随地看视频慕课网APP

相关分类

Go
我要回答