golang xml解析
第二章里还提到了xml的解析部分。之前有想整理下encoding包下常用的几个文件格式的处理。这次刚好整理下xml的部分.先上例子
|
|
(代码里的xml来自rss wiki示例)
首先将xml 解析成指定的interface{},这里则是以struct作为例子。
既然是struct,首先提下映射规则。首先struct的字段必须是可导出的。第二tag的优先级是最高的。就是代码里的
|
|
这些内容,然后他也会根据可导出的字段名来映射。当然如果想要忽略部分字段只需要在tag里写”-“即可
比如上面代码里的He这个字段,这是一个干扰项,xml里并没有对应的节点,虽然他并不会解析出内容,但是在还原成xml时他是会占用heh这个节点的。只需要改成xml:"-"在还原的xml里就不会看到这个字段了(当然这样写就不对,都是根据数据来定义struct的,这里只是举个例子)。
至于优先级的问题,就比如
|
|
这个字段的定义。他是获取guid节点中的isPermaLink这个attribution.还原后的自然是isPermaLink而不是GuidAttr.
同理的还有rss2 这个typeName.不过这里有些特殊:XMLName以及类型xml.Name是固定写法,是来指定根节点的。这里也是故意写成rss2,对应的节点是rss.在tag的作用下还原后是rss.不然的话会是rss2.因为没有XMLName的话会根据类型名做转换。
还有就是,chardata这个写法.这是来获取value值的。
接下来就是方法的解释了
|
|
这个方法很简单,src是byte数组,dst是interface{}.这里自然是struct.(这里使用指针是因为后面需要将其作为对象操作,查看其值,不然用过后就抛弃了,无法操作)
返回一个error这个方法没什么好说的。
对应的方法是Marshal.
|
|
同理,与Unmarshal对应即可
|
|
这里是对应的两组方法。上面则是返回对应的struct.参数只要是符合io.Reader以及io.Writer接口即可。分别做数据源读入以及输出。这里就简单用buffer和stdout举例了。
构造完成之后则调用对应的编解码方法即可。
其实解析的方法很简单,主要是映射关系的管理。简单应用应该就是像上面所写的那样了。还有就是今天群里有大神语音解惑,但是因为个人水平问题,听的很懵。很气但是无可奈何。自己mark下。我还会回去的,到时候一定可以听懂的!
golang xml解析的更多相关文章
- golang xml和json的解析与生成
golang中解析xml时我们通常会创建与之对应的结构体,一层层嵌套,完成复杂的xml解析. package main; import ( "encoding/xml" " ...
- Golang配置文件解析-oozgconf
代码地址如下:http://www.demodashi.com/demo/14411.html 简介 oozgconf基于Golang开发,用于项目中配置文件的读取以及加载,是一个轻量级的配置文件工具 ...
- xml解析技术
本文总结Dom,sax解析, 使用Java作为工具解析xml文档. 1 Dom 综述:Dom解析xml通常也称为xmlDom (和htmlDom技术差不多),将xml文档封装成树,好处就是xml中的 ...
- Duilib源码分析(三)XML解析器—CMarkup
上一节介绍了控件构造器CDialogBuilder,接下来将分析其XML解析器CMarkup: CMarkup:xml解析器,目前内置支持三种编码格式:UTF8.UNICODE.ASNI,默认为UTF ...
- JSON解析和XML解析对比
JSON解析和XML解析是较为普遍的两种解析方式,其中JSON解析的市场分额更大.本文系统的分析两种解析方式的区别,为更好地处理数据作准备.由于目前阶段主要是做移动开发,所以本文所描述的JSON解析和 ...
- 【Android】实现XML解析的几种技术
本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能. 在 ...
- 定位和xml解析和gson解析加上拉加载,下拉刷新
这里的上拉加载,下拉刷新用到是依赖包 Mainactivity,xml解析和定位 package com.exmple.autolayout; import java.util.List; impor ...
- tinyxml一个优秀的C++ XML解析器
读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好. TinyXML是一个开源的解 ...
- PERL/LEX/YACC技术实现文本解析--XML解析
继周六的p_enum.pl后,再来一篇说说我用perl做的lex,yacc工具.之前说了,我学习lex和yacc的最初动机是为了做个C语言解释器的SHELL:但后来工作中的实际需要也是制作perl版l ...
随机推荐
- Myeclipse 10/2014 配置插件(svn、maven、properties、velocity)的方法
一.配置SVN详细图解 什么是SVN? 管理软件开发过程中的版本控制工具. 下面会以两种方式来介绍怎么安装svn,myeclipse安装SVN插件步骤,以myeclipse 2014为例,第一种是最常 ...
- lower_bound()和upper_bound()用法详解
lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的. lower_bound( begin,end,num):从数组的begin位置到end ...
- jenkins-master-slave节点配置总结
一.jenkins分布式简单介绍 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能 二.jenk ...
- HTML5之FileReader小结
方法: 方法名 参数 描述 abort none 中断读取 readAsBinaryString file 将文件读取为二进制码 readAsDataURL file 将文件读取为 DataURL r ...
- 扯下Python的super()
注: Python 2.7.x 环境下 今晚搜东西无意中看到这篇Understanding Python super() with __init__() methods. 其实这篇老早就看过了, 不过 ...
- 6)PHP,预定义变量
预定义变量也叫超全局变量: :预定义变量又叫超全局变量,包括: $_GET, $_POST, $_SERVER, $_REQUEST, $GLOBALS, $_COOKIE, $_SESSION, . ...
- mybatis 自定义类型转换器 (后台日期类型插入数据库)
后台日期类型插入数据库 有以下几种发法: 1 调用数据库 日期字符串转日期函数 str_to_date("日期","yyyy-MM-dd HH:mm:ss") ...
- Linux centos 下安装redis
一.安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel 二.选择安装文件 ...
- Sequence Diagram时序图 - 应该是最简洁有力的业务了
直接看UML吧,一目了然,不用解释.自信男人,无须多言. 这是用ListView显示Post的流程. 这是Uppdate User Profile的流程.自信男人,无须多言.
- ODT(区间覆盖问题)
解释:先留坑 题目:https://www.cometoj.com/contest/73/problem/D?problem_id=4120 #include<bits/stdc++.h> ...