51Testing软件测试论坛

标题: qtp的脚本中如何将xml文件转化为txt,急请教 [打印本页]

作者: sinpa    时间: 2006-8-24 23:12
标题: qtp的脚本中如何将xml文件转化为txt,急请教
sdlkfj9

我只知道如何将txt转化为xml,脚本如下。
那位兄台能告诉我如何将xml文件转化为txt。。。。。。。。。。

book.txt  
1  |7-100-01532-8/K.206  |ASP.NET  XML高级编程  |Chris  Knowles,Stephen  Mohr等/刘爽  |清华大学出版社  |46  |1.bmp  
2  |7-302-04934-3  |ASP与XML  高级编程  |Mark  Baartse&Richard  Blair等/康博  |清华大学出版社  |78  |2.bmp  
3  |7-302-05649-8  |基于XML  的  ASP.NET开发  |Dan  Wahlin/王宝良  |清华大学出版社  |42  |3.bmp  
4  |7-111-10440-4  |ASP.NET  技术内幕  |Stephen  Walther  |机械工业出版社  |99  |4.bmp  
5  |7-302-06148-3  |XML应用的UML建模技术  |David  Carlson/周靖  侯奕萌  沈金河等  |清华大学出版社  |32  |5.bmp  
6  |7-111-11385-3  |Effective  Java中文版  |Joshua  Bloch/潘爱民  |机械工业出版社  |39  |6.bmp

book.vbs  
Option  Explicit  
if  WScript.Arguments.length=0  then  
           WScript.echo  "请指向数据源文件!"  
           WScript.quit  
end  if  
Dim  dbfile,db,sdb,i  
Dim  fso  
Dim  fo,nf  
dbfile  =  WScript.Arguments(0)  
WScript.echo("正在解析"+dbfile+"....")  
Set  fso  =  WScript.CreateObject("Scripting.FileSystemObject")  
if  fso.FileExists(dbfile)  Then  
           Set  fo  =  fso.OpenTextFile(dbfile,1)  
           db  =  split(fo.ReadAll,Chr(13)&Chr(10))  
           For  each  sdb  in  db  
                       If  UBound(split(sdb,"  |"))<>6  Then  
                                   WScript.echo  vbCrlf  &  "未知的数据源文件:"  &  sdb  
                                   WScript.echo  "正确的格式:总排序号  |ISBN  |书名  |作者/翻译  |出版社  |价格  |图片"  &  vbCrlf  
                       Else  
                                   autoXML  split(sdb,"  |")  
                       End  If  
           Next  
Else  
           WScript.echo  "请指向数据源文件!"  
           WScript.quit  
End  If  

function  autoXML(ary)  
           On  Error  Resume  Next  
           Dim  xmlFile  
           Dim  xmldoc,root,books  
           xmlFile  =  "book.xml"  
           Set  xmldoc  =  WScript.CreateObject("Microsoft.XMLDOM")  
           xmldoc.async  =  false  
           xmldoc.load  xmlFile  
           if  xmldoc.parseError.errorCode  Then  
                       Dim  xmlhead,xslhead  
                       Set  xmlhead  =  xmldoc.createProcessingInstruction("xml","version=""1.0""  encoding=""UTF-8""")  
                       xmldoc.insertBefore  xmlhead,xmldoc.childNodes(0)  
                       Set  xslhead  =  xmldoc.createProcessingInstruction("xml-stylesheet","type=""text/xsl""  href=""book.xsl""")  
                       xmldoc.insertBefore  xslhead,xmldoc.childNodes(1)  
                       Set  books  =  xmldoc.createElement("books")  
                       xmldoc.appendChild  books  
           Else  
                       Set  books  =  xmldoc.documentElement  
           End  If  
           Dim  book,nodes,node  
           Set  book  =  xmldoc.createElement("book")  
           books.appendChild  book  
           nodes  =  split("id,ISBN,book_name,writer,publish,price,img",",")  
           for  i=0  to  UBound(nodes)  
                       Set  node  =  xmldoc.createElement(nodes(i))  
                       node.text  =  ary(i)  
                       book.appendChild  node  
           Next  
           xmldoc.save  xmlFile  
           If  Err.number<>0  Then  
                       WScript.echo  "保存失败!原因:"  &  Err.Description  
           Else  
                       WScript.echo  "《"  &  ary(2)  &  "》保存成功!"  
           End  If  
End  Function

[ 本帖最后由 sinpa 于 2006-8-24 23:14 编辑 ]
作者: lyscser    时间: 2006-8-25 09:05
………………
另存为*.txt文件不久行了
作者: sinpa    时间: 2006-8-25 12:46
标题: 你是过可以吗,我试了不行啊
直接从xml中取出的文字内容是乱麻,但是从txt中取出的文字是正常的
作者: skyhen    时间: 2006-8-28 10:42
楼主如果解决乱码问题的话能否把代码发给小弟一份,因为小弟也碰到了这样的问题。
小弟先谢谢了,我的邮箱是hensky@163.com
作者: sinpa    时间: 2006-8-28 11:44
标题: 郁闷阿
乱码还是没有解决,那位兄台能指点一下。
qtp他读取Xml文件的内容时,取出的都是乱码,后来我将它转化为txt文件了,但读出的还是乱码,看来无计可施。
现在只能想想,在读取之前怎么设定文字的内码了。。。
等待解决中阿。。。。。。。。。。。。。。。。。。。。。。。。。。
作者: sinpa    时间: 2006-8-29 00:37
标题: 5天了
没有人定一下,郁闷。。。。。。。。。。。。。
作者: sinpa    时间: 2006-8-29 12:32
标题: 好消息
问题终于解决了
作者: skyhen    时间: 2006-8-29 12:54
楼主能将解决的代码发给我一份吗
我的邮箱是hensky@163.com
小弟先谢谢了
作者: sinpa    时间: 2006-8-29 13:28
标题: 是这样的
当用qtp直接读取xml文件得时候 ,其中的内容为:
<?xml version="1.0" encoding="utf-8"?>         。。。。。。。。。。
其中="utf-8"?>导致了乱码

我给大家一个简单的方法:
Dim v_text
Set doc = XMLUtil.CreateXML()
doc.LoadFile "d:\test.xml"
v_text =  doc.ToString
DataTable("Array_text", dtglobalSheet) = v_text
msgbox v_text
那么得到的内容中文就是正确的了,doc.ToString目的就是转化字符集
如果大家有什么更好的方法,可以提出,相互探讨一下。

但是读出的内容也有问题,内容顺序有点乱,但不影响取数据。
哈哈sdlkfj3sdlkfj3sdlkfj2sdlkfj5

[ 本帖最后由 sinpa 于 2006-8-29 13:31 编辑 ]
作者: skyhen    时间: 2006-8-29 17:00
sinpa大虾,我把你的程序放到VBS文件中去调试的话,我该怎么写啊,我是通过修改你上面的TXT转XML代码实现的,但是出来的还是乱码啊,请楼主把代码发给小弟一份,小弟将万分感激。
作者: xyuan007    时间: 2006-9-5 11:16
由于字符集的问题,我用QTP从XML文件中读取内容时会报错,但是设为encoding=GB2312就没问题了。
可以这样处理:
将文件1的内容读取出来,然后将文件1内容中的utf-8改为GB2312,再保存为文件2,接着对文件2进行处理就可以了。
作者: walker1020    时间: 2006-9-5 19:36
谢谢楼主的共享精神!
作者: xyuan007    时间: 2006-9-6 10:53
和楼主代码的功能一样,用RUBY写的,RUBY的字符处理特别好
require 'rexml/document'

def xmlrootcreate(xmldoc,rootname,rootvalue=nil)
if rootname.kind_of? String
root = REXML::Element.new(rootname)
xmldoc.add(root)
root.add_text(rootvalue)
else
raise "can't create root"
end
end

def xmlelemcreate(parelement,elename,value = nil)
if elename.kind_of? String
child = REXML::Element.new(elename,parelement)
child.add_text(value)
else
raise "can't create element"
end
end

doc = REXML::Document.new
root = REXML::Element.new()
child = REXML::Element.new()
elementname = %w{index code name writer print cost pic}

textfile = File.new("c:\\aa.txt")
tcol = Array.new()
tcol = textfile.read.to_s.split("\n")
trow = Array.new(tcol.length,10)
(1..(tcol.length).to_i).each do |i|
  trow[i-1] = tcol[i-1].split("|")
end

root = xmlrootcreate(doc,"booklist")
child = xmlelemcreate(root,"book")

(1..(tcol.length).to_i).each do |i|
  (1..(trow[i-1].length).to_i).each do |j|
    xmlelemcreate(child,elementname[j-1],trow[i-1][j-1])
  end
end

myfile = File.new("c:\\13021.xml","w+")
myfile.puts("<?xml version=\"1.0\" encoding=\"GBK\"?>")
myfile.puts(doc.document)
myfile.close
作者: netsky_lt    时间: 2006-11-21 16:18
麻烦楼主把代码也发给小弟一份,先谢了。
netsky_lt@126.com
作者: tester007    时间: 2006-11-22 17:19
多谢楼主共享!!!




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2