关于XML的问题

紫寒尺 2011-02-09 11:44:09
如题,我有从接口获得如下格式的一个XML字符串:
<?xml version="1.0" encoding="gb2312"?>
<function>
<function_id>InpDetailSeek</function_id>
<out_code>000</out_code><out_text>执行成功</out_text>
<data rowcount="3908" columns="9">
<row rownum="0">
<column colnum="0" colname="inpatientSn">208189</column>
<column colnum="1" colname="inpatientRxno">10216949</column>
<column colnum="2" colname="detailId">22322239</column>
<column colnum="3" colname="insureId">120400006</column>
<column colnum="4" colname="classNo">03</column>
<column colnum="5" colname="name">静脉输液(加收)</column>
<column colnum="6" colname="spec">无</column>
<column colnum="7" colname="unit">瓶</column>
<column colnum="8" colname="conf">其他</column>
<column colnum="9" colname="price">1</column>
<column colnum="10" colname="quantity">5</column>
<column colnum="11" colname="money">5</column>
<column colnum="12" colname="factMoney">5</column>
<column colnum="13" colname="useDate">2011-01-12</column>
<column colnum="14" colname="enableRation">1</column>
<column colnum="15" colname="enableMoney">5</column>
</row>
<row rownum="1">
<column colnum="0" colname="inpatientSn">208189</column>
<column colnum="1" colname="inpatientRxno">10216949</column>
<column colnum="2" colname="detailId">22322241</column>
<column colnum="3" colname="insureId">120400006</column>
<column colnum="4" colname="classNo">03</column>
<column colnum="5" colname="name">静脉输液(加收)</column>
<column colnum="6" colname="spec">无</column>
<column colnum="7" colname="unit">瓶</column>
<column colnum="8" colname="conf">其他</column>
<column colnum="9" colname="price">1</column>
<column colnum="10" colname="quantity">5</column>
<column colnum="11" colname="money">5</column>
<column colnum="12" colname="factMoney">5</column>
<column colnum="13" colname="useDate">2011-01-12</column>
<column colnum="14" colname="enableRation">1</column>
<column colnum="15" colname="enableMoney">5</column>
</row>
</data>
</function>

如何将data节点里的内容分列导入到VFP的临时表中?
...全文
154 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
taohua300 2011-02-10
  • 打赏
  • 举报
回复

SET DELETED ON
CREATE CURSOR temp (goog c(100),good c(100))
APPEND FROM tt.txt DELIMITED WITH CHARACTER '>'
DELETE FROM temp WHERE good == 'InpDetailSeek</function_id' OR good == '000</out_code ' OR ALLTRIM(good) == ''
UPDATE temp SET goog = goog(goog),good = good(good)
*******下面是行转列的sql语句,我试着写了写没写出来
*******这个我不熟,看其他人写

taohua300 2011-02-10
  • 打赏
  • 举报
回复
那就是用sql语句吧

***********goog.prg***********
FUNCTION goog
LPARAMETERS lcString
RETURN STREXTRACT(lcString,'"','"',3)
ENDFUNC


*********good.prg*************
FUNCTION good
LPARAMETERS lcString
RETURN SUBSTR(lcString,1,AT('</',lcString) - 1)
ENDFUNC


运行代码
SET DELETED ON 
CREATE CURSOR temp (goog c(100),good c(100))
APPEND FROM tt.txt DELIMITED WITH CHARACTER '>'
DELETE FROM gg WHERE good == 'InpDetailSeek</function_id' OR good == '000</out_code ' OR ALLTRIM(good) == ''
UPDATE gg SET goog = goog(goog),good = good(good)
*******下面是行转列的sql语句,我试着写了写没写出来
*******这个我不熟,看其他人写
紫寒尺 2011-02-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 taohua300 的回复:]

使用vfp的xmltocursor函数,前提是你要把原来的xml内容格式转成vfp特有的xml格式

另:上面的代码,使用Strextract函数来取字段内容的话,速度应该快点
[/Quote]

是的,我就是想要转换成vfp能够支持xml格式,但是我没找到效率高的办法
紫寒尺 2011-02-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 taohua300 的回复:]

什么接口能一下传递这么多的数据 ?
[/Quote]

医院用的数据
taohua300 2011-02-09
  • 打赏
  • 举报
回复
使用vfp的xmltocursor函数,前提是你要把原来的xml内容格式转成vfp特有的xml格式

另:上面的代码,使用Strextract函数来取字段内容的话,速度应该快点
taohua300 2011-02-09
  • 打赏
  • 举报
回复
什么接口能一下传递这么多的数据 ?
紫寒尺 2011-02-09
  • 打赏
  • 举报
回复
不好意思,上面打错字了,是“类似”,不是“累死”
紫寒尺 2011-02-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 taohua300 的回复:]

CLEAR
CREATE CURSOR temp (a1 c(20),a2 c(20),a3 c(20),a4 c(20),a5 c(20),a6 c(20),a7 c(20),a8 c(20),a9 c(20),;
a10 c(20),a11 c(20),a12 c(20),a13 c(20),a14 c(20),a15 c(20)) &&创建临时表(字段名我随意些的)
……
[/Quote]

现在数据比较少,可能这样会比较快,如果是有几千几万条,如何保证效率呢?我写过累死的函数,来循环取数据,但是才几千条就要十几分钟,这样的效率太低了,不能满足我的要求。
taohua300 2011-02-09
  • 打赏
  • 举报
回复
CLEAR 
CREATE CURSOR temp (a1 c(20),a2 c(20),a3 c(20),a4 c(20),a5 c(20),a6 c(20),a7 c(20),a8 c(20),a9 c(20),;
a10 c(20),a11 c(20),a12 c(20),a13 c(20),a14 c(20),a15 c(20)) &&创建临时表(字段名我随意些的)
lcString = FILETOSTR("tt.txt")&&我把你贴出的内容放到了tt.txt文件中
lcDataString = SUBSTR(lcString,AT("<data ",lcString),AT("</data>",lcString) - AT("<data ",lcString))&&截取data内容

cTranString = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz<>/="' &&替换字符串,字段内容有英文时不能这样使用
DO WHILE AT("<row rownum=",lcDataString) != 0
lcRowString = SUBSTR(lcDataString,AT("<row rownum=",lcDataString),AT("</row>",lcDataString) - AT("<row rownum=",lcDataString))
lcValue = 'INSERT INTO temp (a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15) VALUES ("'
FOR i = 1 TO 15 && 取值
lcValue = lcValue + CHRTRAN(SUBSTR(lcRowString,AT('colname="',lcRowString,i),AT("</column>",lcRowString,i) - AT('colname="',lcRowString,i)),cTranString,'') + '","'
NEXT
lcValue = SUBSTR(lcValue,1,LEN(lcValue) - 2) + ')'
&lcValue
lcDataString = SUBSTR(lcDataString,AT("</row>",lcDataString) + 6)
ENDDO
BROWSE
taohua300 2011-02-09
  • 打赏
  • 举报
回复
CLEAR
CREATE CURSOR temp (a1 c(20),a2 c(20),a3 c(20),a4 c(20),a5 c(20),a6 c(20),a7 c(20),a8 c(20),a9 c(20),;
a10 c(20),a11 c(20),a12 c(20),a13 c(20),a14 c(20),a15 c(20)) &&创建临时表(字段名我随意些的)
lcString = FILETOSTR("tt.txt")&&我把你贴出的内容放到了tt.txt文件中
lcDataString = SUBSTR(lcString,AT("<data ",lcString),AT("</data>",lcString) - AT("<data ",lcString))&&截取data内容

cTranString = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz<>/="' &&替换字符串,字段内容有英文时不能这样使用
DO WHILE AT("<row rownum=",lcDataString) != 0
lcRowString = SUBSTR(lcDataString,AT("<row rownum=",lcDataString),AT("</row>",lcDataString) - AT("<row rownum=",lcDataString))
lcValue = 'INSERT INTO temp (a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15) VALUES ("'
FOR i = 1 TO 15 && 取值
lcValue = lcValue + CHRTRAN(SUBSTR(lcRowString,AT('colname="',lcRowString,i),AT("</column>",lcRowString,i) - AT('colname="',lcRowString,i)),cTranString,'') + '","'
NEXT
lcValue = SUBSTR(lcValue,1,LEN(lcValue) - 2) + ')'
&lcValue
lcDataString = SUBSTR(lcDataString,AT("</row>",lcDataString) + 6)
ENDDO
BROWSE

2,748

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧