Golang将XML属性解组为接口

时间:2017-07-26 17:08:27

标签: xml go unmarshalling

我正在尝试将一些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&gt;Ground floor&gt;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&gt;Ground floor&gt;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数据时,该字段可以作为字符串或数字给出。

我已经读过你不能解组到一个界面,但有没有人知道我的方案解决这个问题的方法?

1 个答案:

答案 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