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 ...
随机推荐
- dubbo的重试原则
验证思路.使用超时来验证重试次数 XML 注解
- spring前两天
1,Spring是什么 (1) Spring是JavaEE 一站式,轻量级 容器框架 ① JavaEE :企业级 ② 一站式: JavaWeb开发的三层 直接使用Spring一个框架全部完成 ③ 轻量 ...
- coursera课程视频
#!/usr/bin/env python # coding=utf-8 import urllib import urllib2 import cookielib def setcookie(ena ...
- 吴裕雄--天生自然python Google深度学习框架:Tensorflow实现迁移学习
import glob import os.path import numpy as np import tensorflow as tf from tensorflow.python.platfor ...
- Django框架篇
Django框架 1.HTTP超文本传输协议 8中请求方法 GET , POST ,HEAD ,PUT ,DELETE , TRACE ,OPTIONS ,CONNCT 状态码 1xx ;服务器收到请 ...
- remove_if 的效率测试
#include <iostream> #include <functional> #include <vector> #include <algorithm ...
- elementUI的select全选
elementUI中的el-select全选 <template> <el-select class="handle-select" size="min ...
- 写入简单的日志log
log.c: #define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> #include <string.h& ...
- OAuth 2.0安全案例回顾
转载自:http://www.360doc.com/content/14/0311/22/834950_359713295.shtml 0x00 背景 纵观账号互通发展史,可以发现OAuth比起其它协 ...
- FPGA 状态机-序列检测器verilog
实现功能:检测出串行输入数据4位Data二进制序列0101,当检测到该序列的时候,out=1,否则out=0 (1)给出状态编码,画出状态图 (2)门电路实现 (3)verilog实现 首先规定Q3Q ...