您的位置:首页 > 编程语言 > Delphi

今天把原先codelphi的blog迁移过来了!delphi+xml

2006-12-19 17:48 281 查看
第一篇

使用原生ms的xml解析器

2004-09-02

Procedure TFormRes.btnrunClick(Sender: TObject);
Var
SelectIntf: IDOMNodeSelect;
listIntf: IDOMNodeList;
pathstr, ss,ss1: String;
n1: integer;
Begin

Try
res := 0;
edtres.Text := ‘’;

If paramstr(1) <> ‘’ Then
Begin

pathstr := ‘//Content’; //这儿就是XPATH查询串。
xmlfile.LoadFromFile(paramstr(1));
SelectIntf := xmlfile.DOMDocument As IDOMNodeSelect;
listIntf := SelectIntf.selectNodes(pathstr);
// ShowMessage(intToStr( listIntf.length));
For n1 := 0 To listIntf.length - 1 Do Begin
If (listIntf.item[n1].childNodes[0] <> Nil) And (String(listIntf.item[n1].attributes[2].nodeValue) = ‘1′) Then Begin
ss := listIntf.item[n1].childNodes[0].nodeValue;
ss1:= Scanstr(ss);
if ss1<>'’ then
listIntf.item[n1].childNodes[0].nodeValue := ss1;
End;
edtres.Text := inttostr(res);
End;
xmlfile.SaveToFile(paramstr(1));
showmessage(’处理完成!’);

End
else
If edtfile.Text <> ‘’ Then
Begin

pathstr := ‘//Content’; //这儿就是XPATH查询串。
xmlfile.LoadFromFile (edtfile.Text);

SelectIntf := xmlfile.DOMDocument As IDOMNodeSelect;
listIntf := SelectIntf.selectNodes(pathstr);
// ShowMessage(intToStr( listIntf.length));
For n1 := 0 To listIntf.length - 1 Do Begin
If (listIntf.item[n1].childNodes[0] <> Nil) And (String(listIntf.item[n1].attributes[2].nodeValue) = ‘1′) Then Begin
ss := listIntf.item[n1].childNodes[0].nodeValue;
ss1:= Scanstr(ss);
if ss1<>'’ then
listIntf.item[n1].childNodes[0].nodeValue := ss1;
End;
edtres.Text := inttostr(res);
End;
xmlfile.SaveToFile(edtfile.Text);
xmlfile.Destroy;;
showmessage(’处理完成!’);
End;
Finally
End;

End;

Function TFormRes.Scanstr(str: String): String;
Const
localfile = ’src’;

Var
tt,kk,str1,str2: String; //str1暂存剩余部分
pp, index, ipath: integer;
newflag:boolean;
Begin
//定位
str2:='’;
pp := pos(localfile, str);
str1:=str;
newflag:=false;

While pp > 0 Do Begin
If pp > 0 Then Begin
if copy(str1,pp+5,5)=’$PATH’ then
begin
newflag:=true;
break;
end;
For index := pp +5 To length(str1) Do
If str1[index] = ‘”‘ Then
break;
tt := copy(str1, pp+5 , index - pp-5); //get filepath
ipath := length(tt);
if ipath>0 then
While (tt[ipath] <> ‘/’) and (tt[ipath] <> ‘/’) and (ipath>0) Do
ipath := ipath - 1;
kk := copy(tt, ipath + 1, length(tt) - ipath + 1); //get filename
str2 := str2+copy(str1, 0, pp+4) + ‘$PATH’ + kk;
str1:= copy(str1, index, length(str1) - index);
res := res + 1;
End;
pp := pos(localfile, str1);
if pp=0 then str2:=str2+str1;
End;
if newflag then
result:=str
else
result:=str2;

End;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐