返回顶部
首页 > 资讯 > 精选 >解析XML时如何获取空数组?
  • 673
分享到

解析XML时如何获取空数组?

2024-02-10 08:02:19 673人浏览 薄情痞子
摘要

PHP小编百草为您带来解析XML时获取空数组的方法。在处理XML数据时,有时会遇到节点为空的情况,这时候我们需要获取一个空数组来表示这个节点。在php中,可以通过使用xpath表达式或

PHP小编百草为您带来解析XML时获取空数组的方法。在处理XML数据时,有时会遇到节点为空的情况,这时候我们需要获取一个空数组来表示这个节点。在php中,可以通过使用xpath表达式或者使用SimpleXMLElement对象的children()方法来获取空数组。使用xpath表达式可以通过在节点名后面加上"[]"来表示获取空数组,而使用children()方法可以通过传递空字符串作为参数来获取空数组。这些方法可以帮助我们在解析XML时准确地获取到空数组的值。

问题内容

我的任务是编写一个 Go 实用程序,该实用程序接受 xml 文件,解析它,并以 json 返回它。

下面是 xml 的示例:



  
    
  
  
    
  

我编写了以下代码:

package main

import (
    "encoding/JSON"
    "encoding/xml"
    "fmt"
)

type tracks struct {
    xmlname xml.name `xml:"tracks" json:"-"`
    clid    string   `xml:"clid,attr" json:"clid"`
    tracks  []track  `xml:"track" json:"track_list"`
}

type track struct {
    xmlname     xml.name `xml:"tracks"`
    uuid        string   `xml:"uuid,attr" json:"uuid"`
    category    string   `xml:"category,attr" json:"category"`
    route       string   `xml:"route,attr" json:"route"`
    vehicletype string   `xml:"vehicle_type,attr" json:"vehicle_type"`
    point       point    `xml:"point" json:"point"`
}

type point struct {
    latitude  string `xml:"latitude,attr" json:"latitude"`
    longitude string `xml:"longitude,attr" json:"longitude"`
    avgspeed  string `xml:"avg_speed,attr" json:"avg_speed"`
    direction string `xml:"direction,attr" json:"direction"`
    time      string `xml:"time,attr" json:"time"`
}

func main() {
    rawxmldata := `
        
        
            
                
            
            
                
            
        
    `

    var tracks tracks

    err := xml.unmarshal([]byte(rawxmldata), &tracks)
    if err != nil {
        log.fatal(err)
    }

    jsondata, err := json.marshal(tracks)
    if err != nil {
        log.fatal(err)
    }

    fmt.printf(string(jsondata))
}

go.dev

但是,不幸的是,它不起作用。我在控制台中得到以下信息:

2009/11/10 23:00:00 expected element type  but have 

我做错了什么?我该如何解决这个问题?

解决方法

我想我应该将讨论转移到答案,因为我认为你已经非常接近了。正如我提到的,您需要检查 xml.unmarshal 返回的错误。可能看起来像这样:

if err := xml.unmarshal([]byte(rawxmldata), &tracks); err != nil {
        panic(err)
    }

现在您的代码中已经有了有效的 xml 数据,我们可以生成有意义的错误;完成上述错误检查后,运行代码会产生:

panic: expected element type  but have 

goroutine 1 [running]:
main.main()
        /home/lars/tmp/go/main.go:48 +0x12f

发生这种情况是因为您的数据结构中存在一个小拼写错误;在 track 结构的定义中,您有:

type track struct {
    xmlname     xml.name `xml:"tracks"`
    uuid        string   `xml:"uuid,attr" json:"uuid"`
    category    string   `xml:"category,attr" json:"category"`
    route       string   `xml:"route,attr" json:"route"`
    vehicletype string   `xml:"vehicle_type,attr" json:"vehicle_type"`
    point       point    `xml:"point" json:"point"`
}

您将 xmlname 属性错误标记为 tracks,而实际上它应该是 track

type track struct {
    xmlname     xml.name `xml:"track"`
    uuid        string   `xml:"uuid,attr" json:"uuid"`
    category    string   `xml:"category,attr" json:"category"`
    route       string   `xml:"route,attr" json:"route"`
    vehicletype string   `xml:"vehicle_type,attr" json:"vehicle_type"`
    point       point    `xml:"point" json:"point"`
}

最后——这与问题没有直接关系——您应该避免将变量命名为 error,因为这是错误的内置数据类型的名称。我将修改您对 json.marshal 的调用,如下所示:

jsondata, err := json.marshal(tracks)
    if err != nil {
        panic(err)
    }

错误时您不需要 panic() ;这只是摆脱代码的一种便捷方法。

完成这些更改后,如果我们编译并运行代码,我们将得到输出(格式为 jq):

{
  "clid": "020",
  "track_list": [
    {
      "xmlname": {
        "space": "",
        "local": "track"
      },
      "uuid": "551",
      "category": "s",
      "route": "8",
      "vehicle_type": "trolleybus",
      "point": {
        "latitude": "53.61491",
        "longitude": "55.90922",
        "avg_speed": "24",
        "direction": "270",
        "time": "13122022:072116"
      }
    },
    {
      "xmlname": {
        "space": "",
        "local": "track"
      },
      "uuid": "552",
      "category": "s",
      "route": "6",
      "vehicle_type": "trolleybus",
      "point": {
        "latitude": "53.68321",
        "longitude": "57.90922",
        "avg_speed": "42",
        "direction": "181",
        "time": "13122022:072216"
      }
    }
  ]
}

请注意,您的结构中甚至不需要 xmlname 元素;如果我们完全删除它,那么我们就有:

type track struct {
    uuid        string `xml:"uuid,attr" json:"uuid"`
    category    string `xml:"category,attr" json:"category"`
    route       string `xml:"route,attr" json:"route"`
    vehicletype string `xml:"vehicle_type,attr" json:"vehicle_type"`
    point       point  `xml:"point" json:"point"`
}

然后我们得到输出(格式为 jq):

{
  "clid": "020",
  "track_list": [
    {
      "uuid": "551",
      "category": "s",
      "route": "8",
      "vehicle_type": "trolleybus",
      "point": {
        "latitude": "53.61491",
        "longitude": "55.90922",
        "avg_speed": "24",
        "direction": "270",
        "time": "13122022:072116"
      }
    },
    {
      "uuid": "552",
      "category": "s",
      "route": "6",
      "vehicle_type": "trolleybus",
      "point": {
        "latitude": "53.68321",
        "longitude": "57.90922",
        "avg_speed": "42",
        "direction": "181",
        "time": "13122022:072216"
      }
    }
  ]
}

以上就是解析XML时如何获取空数组?的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 解析XML时如何获取空数组?

本文链接: https://lsjlt.com/news/562949.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 解析XML时如何获取空数组?
    php小编百草为您带来解析XML时获取空数组的方法。在处理XML数据时,有时会遇到节点为空的情况,这时候我们需要获取一个空数组来表示这个节点。在php中,可以通过使用xpath表达式或...
    99+
    2024-02-10
  • Java中documentHelper解析xml获取想要的数据
    目录获取单节点数据获取数组节点数据webservice接口的入参和出参都是xml格式的数据,网上有很多方法,下面我将使用documentHelper工具来解析xml格式的数据,获取到...
    99+
    2023-02-01
    documentHelper解析xml Java XML解析
  • 在 Golang 中解码时如何获取 XML 标签的字符数据和属性值
    欢迎各位小伙伴来到编程网,相聚于此都是缘哈哈哈!今天我给大家带来《在 Golang 中解码时如何获取 XML 标签的字符数据和属性值》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感...
    99+
    2024-04-05
  • javascript如何获取对象数组
    javascript中获取对象数组的方法:可以使用“getElementsByTagName”方法获取对象数组;语法格式为:“document.getElementsByTagname('li') ”,这里“li”...
    99+
    2024-04-02
  • jquery如何获取数组下标
    使用jquery获取数组下标的方法:1.新建html项目,引入jquery;2.使用var关键字定义数组;3.使用$.each()方法获取数组下标;具体步骤如下:首先,新建一个html项目,并在项目中引入jquery;<script ...
    99+
    2024-04-02
  • php如何获取数组长度
    在php中使用count()函数获取数组的长度:count()函数是用于返回数组中元素的数目,语法:count(array,mode);在php中使用count()函数获取数组的长度,具体方法如下:count()函数作用:php中count...
    99+
    2024-04-02
  • javascript如何获取数组长度
    这篇“javascript如何获取数组长度”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“javascript如何获取数组长度”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所...
    99+
    2023-06-06
  • java数组索引如何获取
    在Java中,可以通过使用方括号运算符([])来获取数组中的元素。索引从0开始,第一个元素的索引为0,第二个元素的索引为1,依此类推...
    99+
    2023-08-30
    java
  • js如何获取数组极值
    小编给大家分享一下js如何获取数组极值,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!获取数组极值function smallest(array){&nb...
    99+
    2023-06-27
  • mongodb如何获取数组下标
    在 MongoDB 中,可以使用 `$indexOfArray` 操作符来获取数组中指定元素的下标。 `$indexOfArray`...
    99+
    2023-08-30
    mongodb
  • php数组如何获取下标
    在PHP中使用数组是十分常见的,数组是一种可以存储多个值的数据结构。在使用数组时,除了可以获取数组里面的值,也可以获取数组的下标。下标是指数组中每个元素的地址,也是每个元素在数组中的位置。PHP提供了多种方式来获取数组下标,下面将介绍其中的...
    99+
    2023-05-14
  • php 如何获取数组的k
    PHP是一门非常强大的编程语言,被广泛应用于网络应用开发中。在PHP编程中,数组是一种非常重要的数据类型,它能够存储大量的数据并进行快速的检索。在某些应用场景下,我们需要获取数组中的键值,以便进行处理。那么,在PHP中,如何获取数组的键值呢...
    99+
    2023-05-19
  • php如何获取数组key值
    PHP是一门高效的编程语言,它既简单易学,又能为网站提供灵活多变的功能。在PHP中,数组是一种十分常见的数据类型。在使用PHP数组时,经常需要获取数组的键(即key)值。在本文中,我们将介绍如何获取PHP数组的键值。使用foreach循环在...
    99+
    2023-05-23
  • string数组长度如何获取
    要获取字符串数组的长度,可以使用数组的length属性。例如,如果有一个名为arr的字符串数组,则可以使用arr.length来获取...
    99+
    2023-10-26
    string
  • PHP 数组大小如何获取?
    PHP 数组大小如何获取? 在 PHP 中,要获取数组的大小(即数组中元素的数量),可以使用内置函数count()来实现。count()函数可以返回数组或对象中的元素数量。下面我们将通...
    99+
    2024-03-13
    php 获取 数组大小
  • java怎么解析xml获取标签属性值
    在Java中,可以使用DOM(Document Object Model)解析XML并获取标签的属性值。以下是一个简单的示例代码:`...
    99+
    2023-09-29
    java xml
  • BeautifulSoup如何解析XML文档中的XML默认命名空间
    要解析XML文档中的默认命名空间,可以使用BeautifulSoup的find()或find_all()方法,并指定命名空间参数为默...
    99+
    2024-05-15
    BeautifulSoup
  • 如何获取json数组里的数据
    要获取JSON数组中的数据,可以使用不同的方法,具体取决于您使用的编程语言和框架。以下是使用一些常见编程语言和框架的示例:在Java...
    99+
    2023-08-15
    json
  • JavaScript如何获取数组唯一值
    这篇文章主要为大家展示了“JavaScript如何获取数组唯一值”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript如何获取数组唯一值”这篇文章吧...
    99+
    2024-04-02
  • php中如何获取数组长度
    在 PHP 中,有多种方式可以获取一个数组的长度。这些方法都很简单,但可能对初学者来说并不是很明显,因此在本篇文章中,我将介绍几种常用的方法和技巧来获取一个 PHP 数组的长度。方法一:使用 count 函数PHP 提供了一个内置函数用于获...
    99+
    2023-05-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作