前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >XML转换为VFP的临时表,简简单单很好用,值得收藏

XML转换为VFP的临时表,简简单单很好用,值得收藏

作者头像
加菲猫的VFP
发布2022-01-05 09:28:46
7930
发布2022-01-05 09:28:46
举报
文章被收录于专栏:加菲猫的VFP

加菲猫的VFP|狐友会社群的蓝天纺织发来求助,说我有一个XML不知道如何转换为表。

虽然前面有写了XML就是字符串,也教了用Microsoft.XMLDOM来解析,但这次的格式有点点不同,我没有讲过,于是猫猫就出手了,就有了今天的文章。

XML和JSON为异构系统传输的两大数据格式,而相当一部分狐友不知道XML和JSON如何解析,前面很多文章都讲了JSON怎么处理,相比而下,XML的文章比较少。 在现在的混合开发时间,一定要掌握这两种格式的解析。

蓝天纺织发来的XML格式。

代码语言:javascript
复制
XML转换为VFP的临时表,简简单单很好用,值得收藏
加菲猫的VFP|狐友会社群的蓝天纺织发来求助,说我有一个XML不知道如何转换为表。

虽然前面有写了XML就是字符串,也教了用Microsoft.XMLDOM来解析,但这次的格式有点点不同,我没有讲过,于是猫猫就出手了,就有了今天的文章。

XML和JSON为异构系统传输的两大数据格式,而相当一部分狐友不知道XML和JSON如何解析,前面很多文章都讲了JSON怎么处理,相比而下,XML的文章比较少。
在现在的混合开发时间,一定要掌握这两种格式的解析。

蓝天纺织发来的XML格式。

<?xml version="1.0" encoding="GB2312"?>
<Data INFO="YIKAIFAPIAO">
    <YKFP>
        <Row 发票号码="272531" 开票日期="2021-12-22" 客户名称="嘉兴市纺织有限公司" 价税合计="2954.5" 发票代码="211130" 合计金额="2614.6" 税额="339.9"/>
        <Row 发票号码="272530" 开票日期="2021-12-18" 客户名称="吴江市纺织品有限公司" 价税合计="100000" 发票代码="211130" 合计金额="88495.57" 税额="11504.43"/>
        <Row 发票号码="272529" 开票日期="2021-12-10" 客户名称="苏州纺织品科技有限公司" 价税合计="52000" 发票代码="211130" 合计金额="46017.7" 税额="5982.3"/>
        <Row 发票号码="272528" 开票日期="2021-12-10" 客户名称="苏州纺织品科技有限公司" 价税合计="100000" 发票代码="211130" 合计金额="88495.58" 税额="11504.42"/>
        <Row 发票号码="272527" 开票日期="2021-12-10" 客户名称="吴江丝绸贸易有限公司" 价税合计="48000" 发票代码="211130" 合计金额="42477.88" 税额="5522.12"/>
        <Row 发票号码="272526" 开票日期="2021-12-10" 客户名称="苏州纺织有限公司" 价税合计="100000" 发票代码="211130" 合计金额="88495.58" 税额="11504.42"/>
        <Row 发票号码="272525" 开票日期="2021-12-10" 客户名称="吴江市纺织有限公司" 价税合计="35123.2" 发票代码="211130" 合计金额="31082.48" 税额="4040.72"/>
        <Row 发票号码="272524" 开票日期="2021-12-07" 客户名称="吴江市纺织有限公司" 价税合计="35123.2" 发票代码="211130" 合计金额="31082.48" 税额="4040.72"/>
    </YKFP>
</Data>

XML跟HTML很相似,都是标签式声明语言,可以看到标签里面的有很多Rows标签,而于我们平常见不到的是,它所有的数据都放在Row标签的属性中。

方式如下:

  1. 获取所有的Row标签
  2. 获取每行Row中的所有属性

开始解析XML,重点是属性是么处理

利用getElementsByTagName方法来获取所有的Row标签 然后得到每行标签的所有属性 属性也是有属性名和属性值的 发票号码="272525",发票号码为属性名,272525为属性值。 这里有个地方要注意: oxmldoc.LoadXML 是加载XML内容 oxmldoc.Load 是加载XML文件 两者不同,不要用错了,加载成功会返回.T.

遍历输出所有的发票数据

代码语言:javascript
复制
cXml="上面的XML"
oxmldoc=Createobject("Microsoft.XMLDOM")
?oxmldoc.LoadXML(cXml)  &&xml文件用load, 内容用loadxml
oRowtag=oxmldoc.getElementsByTagName("Row")
For i=0 To oRowtag.Length-1
    ?"属性长度",oRowtag.item(i).Attributes.length   
    FOR j=0 TO oRowtag.item(i).Attributes.length-1
       ?oRowtag.Item(i).Attributes.Item(j).nodeName &&属性名
       ?oRowtag.Item(i).Attributes.Item(j).Text  &&属性值
    ENDFOR 
Endfor

接下就是建个临时表,一行一行写入临时表就完成解析啦,这里的代码我就不帮你写啦。

解析XML标签的另一种数据表示方法

XML数据格式如下,这次的数据不是放在属性中,而是放在标签之中,所以解析起来只有一层,更容易。

代码语言:javascript
复制
 <Fp>
    <Djh></Djh>
    <Fpzl>增值税专用发票</Fpzl>
    <Lbdm>211130</Lbdm>
    <Fphm>272525</Fphm>
    <Kprq>20211210</Kprq>
    <Gfmc>吴江市纺织有限公司</Gfmc> 
   </Fp>
代码语言:javascript
复制
TEXT TO lcXML NOSHOW TEXTMERGE 
   <Fp>
    <Djh></Djh>
    <Fpzl>增值税专用发票</Fpzl>
    <Lbdm>211130</Lbdm>
    <Fphm>272525</Fphm>
    <Kprq>20211210</Kprq>
    <Gfmc>吴江市纺织有限公司</Gfmc> 
   </Fp>
ENDTEXT 

oxmldoc=Createobject("Microsoft.XMLDOM")
?oxmldoc.LoadXML(lcXML)  &&xml文件用load, 内容用loadxml
oRowtag=oxmldoc.getElementsByTagName("Fp")
?oRowtag

For i=0 To oRowtag.Length-1    
   ?oRowtag.Item(i).nodeName    &&属性名
   ?oRowtag.Item(i).Text  &&属性值    
Endfor

都给遍历输出来了,接下写临时表,就不用猫猫代劳了吧。

然后我也封装一个类库,专门应对单表转换模式,这样的话,祺佑三层开发框架对XML和JSON的支持就比较完善了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 加菲猫的VFP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开始解析XML,重点是属性是么处理
  • 解析XML标签的另一种数据表示方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档