这个程序可以用于解析任何合法的XML字符串。
以解析这样一个XML的字符串为例:
如上图所示,可以 “XML中的字段标签:XML中对应标签的值” 的格式显示解析的效果。
因为进行了异常处理(使用try..except..end,并且在异常处理中使用ShowMessage弹出异常信息),所以如果输入的字符串不是合法的XML格式的话,程序会正常报错,而不会异常终止。
比如没有输入直接点击解析按钮,效果如下:
有比如输入一个非法的字符串,效果如下
然后看一下代码
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, XMLIntf, XMLDoc;
type
TForm1 = class(TForm)
edt1: TEdit;
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure ReadXml(Node: IXMLNode; var showmess: string);
var
NodeList: IXMLNodeList;
strName: string;
i: Integer;
begin
if not Node.HasChildNodes then Exit;
nodeList := node.ChildNodes;
for i := 0 to nodeList.Count - 1 do
begin
strName := nodeList[i].NodeName;
if nodeList[i].IsTextElement then //如果是元素
begin
showmess:= showmess + strName + ':' + NodeList[i].NodeValue + #13#10;
end
else if nodeList[i].HasChildNodes then //如果有子节点
begin
ReadXml(NodeList[i], showmess);
end;
end;
end;
procedure TForm1.btn1Click(Sender: TObject);
var
sXML, showmess: string;
ComInstrXML: IXMLDocument;
mainNode: IXMLNode;
begin
showmess:= '';
sXML:= edt1.Text;
sXML:= StringReplace(sXML, 'UTF-8', 'gbk', []); //只替换
try //一定不要忘记异常处理,保证程序的稳定性,能够正常处理异常而不至于在发生异常的时候导致程序崩溃
ComInstrXML:= LoadXMLData(sXML);
mainNode:= ComInstrXML.DocumentElement;
readXML(mainNode, showmess);
ShowMessage(showmess);
except
on E: Exception do
begin
ShowMessage(E.Message);
end;
end;
end;
end.
来源:https://www.cnblogs.com/xumenger/p/4711223.html
Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号
执行时间: 0.17823195457458 seconds