jjzjj

arrays - Golang 将相同级别的 XML 元素解码到数组中

coder 2024-07-10 原文

我有 XML,我想将地址信息解码到它的 on 数组中作为我的结构的一部分:

<customer>
    ...
    <dob>1990-10-01</dob>
    <address1>555 Hollywood Blvd</address1>
    <city>Hollywood</city>
    <state>CA</state>
    <zipCode>99999</zipCode>
    <alternateAddress1>575 Hollywood St</alternateAddress1>
    <alternateCity>Los Angeles</alternateCity>
    <alternateState>CA</alternateState>
    <alternateZipCode>12345</alternateZipCode>
    ....
</customer>

我对结构的尝试:

    type Test struct {
      CustProfile struct {
        DOB string `xml:"birthDate" json:"dob"`
        Address []struct {
            PrimaryAddress struct {
                Street string `xml:"address1" json:"line1"`
                City string `xml:"city" json:"city"`
                State string `xml:"state" json:"state"`
                ZipCode string `xml:"zipCode" json:"zip"`
                IsPrimaryAddress string `json:"isPrimaryAddress"`
            }
            AlternateAddress struct {
                Street string `xml:"alternateAddress1" json:"line1"`
                City string `xml:"alternateCity" json:"city"`
                State string `xml:"alternateState" json:"state"`
                ZipCode string `xml:"alternateZipCode" json:"zip"`
                IsPrimaryAddress string `json:"isPrimaryAddress"`
            }
        } `json:"address"`
    } `xml:"customer" json:"custProfile"`
  }

所以我在这里遇到了几个问题。第一个问题是,所有元素都处于同一级别,而且从我到目前为止的了解来看,由于 CustProfile 结构已经与 customer 父元素相关联,所以我无法引用任何Address 结构中的子元素,因为路径将是 customer->?>city,state,etc 由于该路径不存在,它将始终返回 null。

第二个问题是我尝试为 IsPrimaryAddress 定义默认字符串的方式。我尝试执行类似的操作,但出现未定义的错误。

var marshalTest Test
...
marshalTest.CustProfile.Address.PrimaryAddress.IsPrimaryAddress = "Y";
marshalTest.CustProfile.Address.AlternateAddress.IsPrimaryAddress = "N";

是否可以将此 XML 解码为结构,从而产生以下结构?

{
  "custProfile": {
    "dob": "1990-10-01",
    "address": [
      {
        "line1": "555 Hollywood Blvd",
        "city": "HOLLYWOOD",
        "state": "CA",
        "zip": "99999",
        "isPrimaryAddress": "Y"
      },
      {
        "line1": "575 Hollywood St",
        "city": "LOS ANGELES",
        "state": "CA",
        "zip": "12345",
        "isPrimaryAddress": "N"
      }
    ]
}

我对 Go 中的 XML 编码一点也不熟悉,我能处理的最好的是:

 {
      "custProfile": {
        "dob": "1990-10-01",
        "address": null
      }
 }

如有任何帮助,我们将不胜感激。谢谢

最佳答案

我能够结合使用 xml 解析和 Xquery和 json 解析 Gabs手动构建我想要的结构。可能不是最干净的解决方案,但它允许我按照我想要的程度自定义结构。

关于arrays - Golang 将相同级别的 XML 元素解码到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44334020/

有关arrays - Golang 将相同级别的 XML 元素解码到数组中的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby - 在 Ruby 中实现 `call_user_func_array` - 2

    我怎样才能完成http://php.net/manual/en/function.call-user-func-array.php在ruby中?所以我可以这样做:classAppdeffoo(a,b)putsa+benddefbarargs=[1,2]App.send(:foo,args)#doesn'tworkApp.send(:foo,args[0],args[1])#doeswork,butdoesnotscaleendend 最佳答案 尝试分解数组App.send(:foo,*args)

  3. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  4. Ruby Koans about_array_assignment - 非平行与平行分配歧视 - 2

    通过ruby​​koans.com,我在about_array_assignment.rb中遇到了这两段代码你怎么知道第一个是非并行赋值,第二个是一个变量的并行赋值?在我看来,除了命名差异之外,代码几乎完全相同。4deftest_non_parallel_assignment5names=["John","Smith"]6assert_equal["John","Smith"],names7end45deftest_parallel_assignment_with_one_variable46first_name,=["John","Smith"]47assert_equal'John

  5. ruby - 如果指定键的值在数组中相同,如何合并哈希 - 2

    我有一个这样的哈希数组:[{:foo=>2,:date=>Sat,01Sep2014},{:foo2=>2,:date=>Sat,02Sep2014},{:foo3=>3,:date=>Sat,01Sep2014},{:foo4=>4,:date=>Sat,03Sep2014},{:foo5=>5,:date=>Sat,02Sep2014}]如果:date相同,我想合并哈希值。我对上面数组的期望是:[{:foo=>2,:foo3=>3,:date=>Sat,01Sep2014},{:foo2=>2,:foo5=>5:date=>Sat,02Sep2014},{:foo4=>4,:dat

  6. arrays - 这是 Ruby 中 Array.fill 方法的错误吗? - 2

    这个问题在这里已经有了答案:Arraysmisbehaving(1个回答)关闭6年前。是否应该这样,即我误解了,还是错误?a=Array.new(3,Array.new(3))a[1].fill('g')=>[["g","g","g"],["g","g","g"],["g","g","g"]]它不应该导致:=>[[nil,nil,nil],["g","g","g"],[nil,nil,nil]]

  7. ruby - 在哈希的键数组中追加元素 - 2

    查看我的Ruby代码:h=Hash.new([])h[0]=:word1h[1]=h[1]输出是:Hash={0=>:word1,1=>[:word2,:word3],2=>[:word2,:word3]}我希望有Hash={0=>:word1,1=>[:word2],2=>[:word3]}为什么要附加第二个哈希元素(数组)?如何将新数组元素附加到第三个哈希元素? 最佳答案 如果您提供单个值作为Hash.new的参数(例如Hash.new([]),完全相同的对象将用作每个缺失键的默认值。这就是您所拥有的,那是你不想要的。您可以改用

  8. 「Python|Selenium|场景案例」如何定位iframe中的元素? - 2

    本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决

  9. ruby - Arrays Sets 和 SortedSets 在 Ruby 中是如何实现的 - 2

    通常,数组被实现为内存块,集合被实现为HashMap,有序集合被实现为跳跃列表。在Ruby中也是如此吗?我正在尝试从性能和内存占用方面评估Ruby中不同容器的使用情况 最佳答案 数组是Ruby核心库的一部分。每个Ruby实现都有自己的数组实现。Ruby语言规范只规定了Ruby数组的行为,并没有规定任何特定的实现策略。它甚至没有指定任何会强制或至少建议特定实现策略的性能约束。然而,大多数Rubyist对数组的性能特征有一些期望,这会迫使不符合它们的实现变得默默无闻,因为实际上没有人会使用它:插入、前置或追加以及删除元素的最坏情况步骤复

  10. ruby-on-rails - 优雅的 Rails : multiple routes, 相同的 Controller Action - 2

    让多条路线去同一条路的最优雅的方式是什么ControllerAction?我有:get'dashboard',to:'dashboard#index'get'dashboard/pending',to:'dashboard#index'get'dashboard/live',to:'dashboard#index'get'dashboard/sold',to:'dashboard#index'这很丑陋。有什么“更优雅”的建议吗?一个类轮的奖励积分。 最佳答案 为什么不只有一个路由和一个Controller操作,并根据传递给它的参数来

随机推荐