• golang encoding/xml 解析多个根节点的XML文件


    问题

    xml文件格式如下:

    <?xml version="1.0" encoding="utf-8"?>
    <meta><version>1924</version></meta>
    <record><manifest>
    <file><name>resatlas.rec</name><version>resn/v1921</version><md5>09080959b6fee8071eeb7c7c760da5ba</md5></file>
    <file><name>resatlascomp.atlas</name><version>resn/v1234</version><md5>a6e0254c076318fd4cbd6140ca64f2b0</md5></file>
    <file><name>resatlascomp.png</name><version>resn/v1</version><md5>c1990d9110d0cf21ed9404e671577fed</md5></file>
    </manifest></record>
    

    写了一下 encoding/xml 的代码发现,貌似只能获取一个根节点,否则会报错:

    expected element type <record> but have <meta>
    

    曲线救国 <解决方案> 解析多个根节点的xml文件

    既然你不让我解析多个根节点, 那我就修改xml文件,让其只有一个根节点. 我读取xml文本内容到 bf22 []byte 里面,然后去掉头,在包裹上我的 document即可:

    	changed := string(bf22)
    	changed = strings.ReplaceAll(changed, "<?xml version="1.0" encoding="utf-8"?>", "")
    	changed = "<document>" + changed + "</document>"
    

    最终定义的Xml go结构为:

    	type MetaVersion struct {
    		//XMLName xml.Name `xml:"meta"`
    		Version int      `xml:"version"`
    	}
    	type FileVDetail struct {
    		//XMLName xml.Name `xml:"file"`
    		Name    string `xml:"name"`
    		Version string `xml:"version"`
    		Md5     string `xml:"md5"`
    	}
    	type RecordType struct {
    		XMLName xml.Name `xml:"document"`
    		//<meta><version>1924</version></meta>
    		Meta MetaVersion `xml:"meta"`
    
    		//<record><manifest>
    		//<file><name>resatlas.rec</name><version>resn/v1921</version><md5>09080959b6fee8071eeb7c7c760da5ba</md5></file>
    		Files []FileVDetail `xml:"record>manifest>file"`
    	}
    

    不得不说 , 这个 XMLName xml.Name 还是有点恶心的,侵入了我的代码结构.

    转载请注明出处:http://www.cnblogs.com/ayanmw 多谢

    ------------------------------------------------------------------------------------------------

    一定要专业!本博客定位于 ,C语言,C++语言,Java语言,Android开发和少量的Web开发,之前是做Web开发的,其实就是ASP维护,发现EasyASP这个好框架,对前端后端数据库 都很感觉亲切啊。. linux,总之后台开发多一点。以后也愿意学习 cocos2d-x 游戏客户端的开发。

  • 相关阅读:
    (转)C#特性详解
    PHP MSSQL数据操作PDO API
    DWR
    配置JAVA的环境变量
    关​于​h​i​b​e​r​n​a​t​e​中​双​向​外​键​关​联​o​n​e​-​t​o​-​o​n​e​的​p​r​o​p​e​r​t​y​-​r​e​f​=​的​问​题(转)
    Hibernate 二级缓存 总结整理(转)
    EhCache 分布式缓存/缓存集群(转)
    MySQL分区表(转)
    通用权限设计
    (转)关于Struts 2 拦截器参数丢失问题
  • 原文地址:https://www.cnblogs.com/ayanmw/p/14936598.html
Copyright © 2020-2023  润新知