当前位置: 首页 > 知识库问答 >
问题:

除非我删除前面的xml版本=“1.0”encoding=“ISO-8859-1”,否则Go-xml解组无法工作

傅自明
2023-03-14

我花了几个小时试图弄明白这一点,但我不明白为什么它只返回一个空字符串。如果我将响应体剪切并粘贴到一个变量上,然后删除?xml version=“1.0”encoding=“ISO-8859-1”?它很好用。

package main

import (
    "encoding/xml"
    "fmt"
    "io/ioutil"
    "net/http"
)

type entry struct {
    XMLName  xml.Name `xml:"entry"`
    Title    string   `xml:"title"`
    Link     string   `xml:"link"`
    Summary  string   `xml:"summary"`
    Updated  string   `xml:"updated"`
    Catagory string   `xml:"catagory"`
    ID       string   `xml:"id"`
}

type Feed struct {
    XMLName xml.Name `xml:"feed"`
    Title   string   `xml:"title"`
    Entry   []entry  `xml:"entry"`
}

func main() {
    resp, err := http.Get("https://www.sec.gov/cgi-bin/browse-edgar?action=getcurrent&type=4&company=&dateb=&owner=include&start=0&count=2&output=atom")
    if err != nil {
        fmt.Println("Get sec main xml error: %s", err)
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    //fmt.Println(string(body))
    var feedData Feed
    xml.Unmarshal(body, &feedData)

    fmt.Println(feedData.Title)

    for _, entry := range feedData.Entry {
        fmt.Println(entry.ID)
    }
}

有人知道我在哪里犯了错误吗?谢谢你的帮助。

共有1个答案

杨昆
2023-03-14

从codereak提供的链接中,答案是由moraes在“2015年更新答案”中给出的

package main

import (
    "encoding/xml"
    "fmt"
    "golang.org/x/net/html/charset"
    "net/http"
)

type entry struct {
    XMLName  xml.Name `xml:"entry"`
    Title    string   `xml:"title"`
    Link     string   `xml:"link"`
    Summary  string   `xml:"summary"`
    Updated  string   `xml:"updated"`
    Catagory string   `xml:"catagory"`
    ID       string   `xml:"id"`
}

type Feed struct {
    XMLName xml.Name `xml:"feed"`
    Title   string   `xml:"title"`
    Entry   []entry  `xml:"entry"`
}

func main() {
    resp, err := http.Get("https://www.sec.gov/cgi-bin/browse-edgar?action=getcurrent&type=4&company=&dateb=&owner=include&start=0&count=2&output=atom")
    if err != nil {
        fmt.Println("Get sec main xml error: %s", err)
    }
    defer resp.Body.Close()
    var feedData Feed
    decoder := xml.NewDecoder(resp.Body)
    decoder.CharsetReader = charset.NewReaderLabel
    err = decoder.Decode(&feedData)

    fmt.Println(feedData.Title)

    for _, entry := range feedData.Entry {
        fmt.Println(entry.ID)
    }
}

非常感谢。

 类似资料:
  • 问题内容: 如果您的XML输入未使用UTF-8编码,则xml包的功能似乎需要一个。 你在哪里找到这样的东西? 问题答案: 更新了2015年及以后的答案:

  • 问题内容: 我正在使用创建一个xml 在此上添加一些属性后,当我尝试打印它时,它看起来像这样, 有没有办法删除xml版本节点?谢谢 问题答案: 从理论上讲,您可以提供保存文档时删除XML声明的选项,但这仅在Libxml> = 2.6.21(和buggy)中可用。一种替代方法是使用

  • 我目前正在使用JQuery mobile开发一个移动网站。我在我的foobar中使用了多个页面。html导航,如下所示: 我加载foobar。html文件,单击Go to Bar,即可正常工作;然而,当我从索引导航时。hmtl到foobar。html并再次测试,链接无法工作。刷新页面可以解决此问题。 如何解释这种行为以及如何修复它?

  • 我正在为Android开发一个应用程序,在那里我必须解析不同的XML文件。其中大多数是用UTF-8编码的,但也有少数是用ISO-8859-1编码的。 我处理输入的代码如上所示。文档介绍了: 如果没有字符流,但有字节流,解析器将使用InputSource中指定的编码使用该字节流,或者(如果没有指定编码)使用XML规范中的算法自动检测字符编码。 我传递的是,但我没有指定编码,因此根据文档,编码应该被自

  • 主要内容:ISO-8859-1,HTML 预留字符,ISO 8859-1 字符实体现代的浏览器支持的字符集: ASCII 字符集 标准 ISO 字符集 数学符号、希腊字母、其他符号 ISO-8859-1 ISO-8859-1 是大多数浏览器默认的字符集。 ISO-8859-1 的较低部分(从 1 到 127 之间的代码)是最初的 ASCII 字符集(0-9 的数字,大写和小写英文字母表,以及一些特殊字符)。 ISO-8859-1 的较高部分(从 160 到 255 之间的代码)

  • 问题内容: 我必须用Java处理这种情况: 我从声明了encoding = utf-8的客户端收到XML格式的请求。不幸的是,它可能不包含utf-8字符,并且有必要从我这一边的xml中删除这些字符(旧式)。 让我们考虑一个示例,其中该无效XML包含£(磅)。 1)我将xml作为带有£的java字符串(我现在无法访问接口,但我很可能将xml作为java的字符串)。我可以使用replaceAll(£,