51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3148|回复: 3
打印 上一主题 下一主题

[原创] test complete 读取xml

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-6-21 10:53:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人需要读取xml文件里WSXX节点的值,如下
<?xml version="1.0" encoding="GBK" ?>
- <tiripPackage version="1.0" xmlns="http://www.chinatax.gov.cn/tirip/dataspec">
- <![CDATA[
<?xml version="1.0" encoding="GBK"?>
<HDXX>
     <NSRSBH>999999999999999</NSRSBH>
     <SBZL>
          <SBZLCODE>10102</SBZLCODE>
          <SBZLMC>小规模增值税申报</SBZLMC>
          <SBQJ>1</SBQJ>
          <ZSXMBM></ZSXMBM>
          <ZSXMPY></ZSXMPY>
          <ZSXMMC>小规模增值税申报</ZSXMMC>
          <WSXXS>
                <WSXX>
                         <CODE>BQYJ</CODE>
                     <NAME>本期预缴金额</NAME>
                     <VALUE>2</VALUE>
                </WSXX>
               

用tc帮助文档的example只能读取第一个<?xml version="1.0" encoding="GBK"?>下的节点,第二个<?xml version="1.0" encoding="GBK"?>下面的节点就读不到了
procedure TestWithXPath1;
var
  Doc, s, Nodes, ChildNodes, i, Node : OleVariant;
begin
  // Create COM object
  Doc := Sys.OleObject('Msxml2.DOMDocument');
  Doc.async := false;
  
  // Load data from a file
  // We use the file created earlier
  Doc.load('C:\data1.xml');
  
  // Report an error, if, for instance, the markup or file structure is invalid
  if Doc.parseError.errorCode <> 0 then
  begin
    s := 'Reason:' + #9 + Doc.parseError.reason + #13#10 +
         'Line:' + #9 + VarToStr(Doc.parseError.line) + #13#10 +
         'Pos:' + #9 + VarToStr(Doc.parseError.linePos) + #13#10 +
         'Source:' + #9 + Doc.parseError.srcText;
    // Post an error to the log and exit
    Log.Error('Cannot parse the document.', s);
    Exit;
  end;
  
   //Use an XPath expression to obtain a list of "control" nodes
  Nodes := Doc.selectNodes('//WSXX');//第一个xml头下可以读出来,第二个头下读不出来了
  showmessage(Nodes.length);
  
  // Process the node
  for i := 0 to Nodes.length - 1 do
  begin
    // Get the node from the collection of found nodes
    Node := Nodes.item(i);
    // Get child nodes
    ChildNodes := Node.childNodes;
    // Output two child nodes to the log
    Log.Message(ChildNodes.item(1).text + ': ' + ChildNodes.item(2).text);
  end;
end;

各位大虾,有知道的帮忙下喔,谢谢谢谢拉

[ 本帖最后由 Astina 于 2010-6-21 12:24 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2010-6-21 12:05:41 | 只看该作者
这个XML文档好像不规范吧?!
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2010-6-21 12:22:58 | 只看该作者

回复 2# 的帖子

恩,就贴了重点的,就是一个头里又嵌套 了一个的话,就读不到第二个的
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2010-6-21 17:35:38 | 只看该作者
解决拉Nodes := Doc.selectNodes('//content');
  //showmessage(Nodes.length);
  txt := Nodes[0].text;
  //showmessage(Nodes[0].text);
  Doc.loadXML(txt);
  Nodes_new := Doc.selectNodes(xpath);
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-25 10:01 , Processed in 0.062883 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表