首页 > 编程知识 正文

golang etree,go for a degree

时间:2023-05-06 11:20:44 阅读:180819 作者:1624

使用oetree解析XML文档目录的Go使用etree解析XML1,简单理解xml2,在Go语言中使用etree解析XML(1),读取XML (2),从路径中读取要素或属性的位置)3)

1、简单理解xml

有关xml元素和属性的信息,请参见下图。

1、尖括号中的内容是元素2,它通过元素名称创建xml路径。 例如,Preset路径:/envelop/body/getpresetsresponse 3,元素具有属性。 例如,preset元素具有属性token4,属性具有简单属性值的xml示例:

是什么? XML version=' 1.0 ' encoding=' utf-8 '? env : envelope xmlns 3360 env=' http://www.w3.org/2003/05/soap-envelope ' xmlns 3360 soap enc=' http://www.w3.orrorororrrrope 2001/XML schema-instance ' xmlns 3360 xs=' http://www.w3.org/ver 10/schema ' xmlns : TDS=' http://www.on Vif.org wsdl ' xmlns 3360 TRT=' http://www.on Vif.org/org wsdl ' xmlns 3360 timg=' http://www.on Vif.org/ver 20/imaging/wsdl ' wsdl ' xmlns : tan=' http://www.on Vif.org/ver 20/analytics/wsdl ' xmlns 3360 tst=' http://ww.on Vif wsdl ' xmlns 3360 error ' xmlns 3360 dn=' http://www.on Vif.org/ver 10/network//topics ' xmlns 3360 TMD=' http://ww.on Vif.org/ver 10 wsdl ' xmlns 3360 wsdl=' http://schemas.XML soap.org wsdl ' xmlns 3360 w soap 12=' http://schemas.XML soap.org/wsdl/soap 12 org HTP ' xmlns 3360 d=' http://schemas.XML soap.org/ws/2005/04/discovery ' xmlns 3360 wsad is=' http://schemas.XML soap addressing ' xmlns 3360 wsnt=' http://docs.oasis-open.org/WSN/B- B- b 005 addressing ' xmlns 3360 ws top=' http://docs.oasis-open.org/WSN/t-1 ' xmlns 3360 wsrf-BF=' http://docs.opsis-opsis BF-2 ' xmlns : wsntw=' http://docs.oasis-open.org/WSN/bw addressing/wsdl ' xmlns 3360 wsrf-r=' http://docs.oasis-open.org/wsrf/r-2 ' xmlns 3360 TRC=' http://ww.org wsdl ' wsdl ' xmlns 3360 Trp=' http://www.on Vif.org/ver 10/re r10 wsdl ' xmlns 3360 TN shik=' http://ww.hikvision.com/2011/er10 topics ' xmlns 3360 hik wsd=' http://www.onvifext.coonvifext wsdl ' xmlns 3360 hik xsd=' http://www.onvifext.com/on Vif/exxmlns schema ' xmlns 3360 tas=' http://www.on Vif.ORIF wsdl ' xmlns 3360 tr2=' http://www.on Vif.org/ver 20/media/wsdl ' xmlns analytics ' env : bodytptz : getpresetsresponsetptz : preset token='1' TT : name预设点1/t : name TT : ptzpositiontt : panti ltx=' 0.847167 ' y=' 0.531368 '/TT :粗犷的金毛x='0.000000'/TT 3360 ptzpositital tptz : presettptz : preset token='2' TT : name预设点2/TT : name TT : ptzpositiontt : panti ltx=' 0.964722 ' y=' TT :粗犷的金毛x=' 0.000000 '/TT : ptz position/tptz : presettptz 3360 preset token='3' TT : name预设点3/t : name TT : ptzpositiontt : panti ltx=' 0.847167 ' y=

2、Go语言使用etree分析xml etree可以像分析json一样容易地分析XML。 (etree地址: https://pkg.go.dev/github.com/bee vik/etree ) ) ) )。

1、读取xml2,从路径中找出要素和属性3,取得属性值或要素值。 例如,如果分析上面的xml文件,则整体代码将类似于以下内容:

doc :=etree.new document (if err :=doc.readfromstring ) message ); 错误!=nil { returnreturninfo } getpresetbytokenerr, ' read XML failed.' } root :=doc.select element (' envelope ) ) if root==returnreturninfo (returetpresetbytokenenenenent ) token :=root.find elements ('./body/getpresetsresponse/preset ' ) if token==nil { retu ure } ' read XML failed .

(1)、读入xml时,可以从文件读入字符串或直接读入

doc :=etree.new document (if err :=doc.readfromstring ) message ); 错误!=nil { returnreturninfo } getpresetbytokenerr,' readXMLfailed.'}}(2),通过路径找到元素或属性的位置来设置根节点,从根节点中查找方便的元素节点

root :=doc.select element (envelope ) ) if root==nil { returnreturninfo } getpresetbytokenerr, ' read XML failed.' } token :=root.find elements ('./body/getpresetsresponse/preset ' ) if token==nil { retu uretu } 在对同名的多个要素节点使用etree内的接口时获取要素值时,只要在find element中找到要素路径后获取要素的text值即可。

fmt.println (RES.find element (./name ).Text ) ) ) ) ) ) )要获取属性值的属性的值,请将属性的attr值设置为

fmt.println(RES.selectattr ) token ).Value )然后循环每个元素节点,以获取相应元素节点的属性值及其子元素的元素值。

for _,RES :=range token { fmt.println (RES.select attr (token ).Value ) fmt.println ) RES.findelement ) )

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。