我正在尝试将一些XML解组为具有接口{}类型的结构。但是每当我尝试运行它时,代码根本不会提取任何东西。所有其他元素似乎都工作正常,如果我将类型设置为字符串或[]字节,它将起作用,但我需要它比这更灵活。
我感兴趣的元素是第32行 - FloorRefID
https://play.golang.org/p/Ehr8qx1aWf
<?xml version="1.0" encoding="UTF-8"?>
<Locations totalPages="1" currentPage="1" pageSize="25">
<WirelessClientLocation macAddress="00:00:00:00:00:00">
<MapInfo mapHierarchyString="Head office>Ground floor>Store" floorRefId="-1122334455667789">
<Image imageName="floorPlan1.png" />
</MapInfo>
<MapCoordinate x="2850" y="3000" unit="FEET" />
</WirelessClientLocation>
<WirelessClientLocation macAddress="11:11:11:11:11:11">
<MapInfo mapHierarchyString="Head office>Ground floor>Store" floorRefId="-1122334455667789">
<Image imageName="floorPlan1.png" />
</MapInfo>
<MapCoordinate x="10.72" y="76.49" unit="FEET" />
</WirelessClientLocation>
<WirelessClientLocation macAddress="26:cd:96:46:0b:2b">
<MapInfo floorRefId="0" />
<MapCoordinate x="51.52" y="4.2" unit="FEET" />
</WirelessClientLocation>
</Locations>
给出一些背景;我正在开发一个与供应商集成的项目,有时我们会以XML格式接收数据,有时也会以JSON格式接收数据。我想构建一些可以解组两者结构的东西,而不是复制结构集。它有许多子结构,这意味着除了这个属性之外,保留两个几乎完全相同的结构需要做更多的工作。
当我们收到JSON数据时,该字段可以作为字符串或数字给出。
我已经读过你不能解组到一个界面,但有没有人知道我的方案解决这个问题的方法?
答案 0 :(得分:3)
始终检查返回的错误非常重要。
from itertools import accumulate, repeat
relationship = lambda seed, weight: seed*weight - seed*weight**2
seed = .5
weight = 3
inputs = list(repeat(seed,10))
first = [x for x in accumulate(inputs, relationship)]
您获得的错误是
.5
空接口无法解组,因为空接口没有任何导出字段来映射xml键/值。
然而,有办法绕行。在if err := xml.Unmarshal([]byte(xmlRawData), &xmlData); err != nil {
fmt.Println(err)
}
结构上实现xml.Unmarshaler界面。
示例:您更新的代码
cannot unmarshal into interface {}
完整代码,播放链接:https://play.golang.org/p/wZQOsQv0Nq
输出:
VendorMapInfo