当前位置: 首页 > 面试题库 >

在GOlang中整理XML:字段为空(APPEND不起作用?)

扶誉
2023-03-14
问题内容

我正在学习在Go中创建XML。这是我的代码:

type Request struct {
    XMLName       xml.Name        `xml:"request"`
    Action        string          `xml:"action,attr"`
    ...
    Point         []point         `xml:"point,omitempty"`
}

type point struct {
    geo    string `xml:"point"`
    radius int    `xml:"radius,attr"`
}

func main() {
    v := &Request{Action: "get-objects"}
    v.Point = append(v.Point, point{geo: "55.703038, 37.554457", radius: 10})
    output, err := xml.MarshalIndent(v, "  ", "    ")
    if err != nil {
        fmt.Println("error: %v\n", err)
    }
    os.Stdout.Write([]byte(xml.Header))
    os.Stdout.Write(output)

}

我希望输出是这样的:

<?xml version="1.0" encoding="UTF-8"?>
  <request action="get-objects">
      <point radius=10>55.703038, 37.554457</point>
  </request>

但是我得到的是:

 <?xml version="1.0" encoding="UTF-8"?>
      <request action="get-objects">
          <point></point>
      </request>

我想念什么或做错什么?因为“ name,attr”东西对其他所有东西都适用(例如,如您所见,对于“ request”字段)。谢谢。


问题答案:

您的代码中有几处错误。在Go中使用编码包时,所有要编组/解组的字段都必须导出。请注意,结构本身不必导出。

因此,第一步是更改point结构以导出字段:

type point struct {
    Geo    string `xml:"point"`
    Radius int    `xml:"radius,attr"`
}

现在,如果要Geo在点内显示字段,则必须添加,cdata到xml标记中。最后,无需向omitempty切片添加关键字。

type Request struct {
    XMLName xml.Name `xml:"request"`
    Action  string   `xml:"action,attr"`
    Point   []point  `xml:"point"`
}

type point struct {
    Geo    string `xml:",chardata"`
    Radius int    `xml:"radius,attr"`
}

去操场



 类似资料:
  • 问题内容: 为什么这项工作有效- 但这不是- 第二种情况下的输出为。你能解释一下输出吗? 问题答案: 该方法没有返回值。它会在适当的位置更改列表,并且由于您没有将分配给任何变量,因此只是“迷失在空间” 我没有重载所有有问题的方法,但是概念应该很清楚。

  • 编写一个程序来检查列表中是否存在给定的数字。如果存在,则显示元素在列表中的位置。如果该元素不存在,则将该元素添加到列表中。

  • 问题内容: 我对Go之类的打字语言还是陌生的,并且正在尝试学习实现事物的最佳方法。 我有两个表示将插入到mongodb数据库中的模型的结构。一个结构(投资)具有另一个结构(组)作为其字段之一。 我遇到的问题是在投资模型中,不需要组。如果没有组,我认为最好不要将其插入数据库。在Go中处理这种数据库模型的最佳方法是什么? 问题答案: tl; dr :使用,如果您需要担心零值和null /未指定之间的差

  • 问题内容: 我们在其他语言中认为是理所当然的,并且几乎期望它可以继续工作,但不会起作用-这样做是如此自然,所以为什么编译器不满意?只是有时候感觉就像不耐烦。 递增值的唯一方法是将其放在单独的行中? http://play.golang.org/p/_UnpZVSN9n 问题答案: 而在golang声明,不表达

  • 问题内容: 我已经测试了elasticsearch突出显示字段功能,并且工作正常。我使用了 elasticsearch2.4.4 和 spring-data- elasticsearch-2.0.0.RELEASE 我最近将 elasticsearch 升级到 5.5.0 和 spring-data-elasticsearch-3.0.0.M4 当我测试相同的代码时,突出显示不会发生 下面是示例代

  • 正则表达式非常简单: 这在Neo4j服务器web控制台中有效。我收到了预期的结果。 当我通过Java使用REST接口时,我必须将regex更改为:(添加了反斜杠)。我不明白为什么,但它确实有效(再次返回了预期结果)。 相同的正则表达式不适用于嵌入式Neo4j: 请注意 不会显示在错误日志中(至少在 Intellij 控制台上)。 更糟糕的是< code > "(?我)。* \ \ baaaaaaa