<考核表 Ver="1">
<年级>
<班级 班号= "0" 名字= "陈老师" />
<班级 班号= "1" 名字= "黄老师" />
</年级>
<学校>
<班级 班号="0" 名字="陈老师" 年龄="33" 性别="男">
<学生 名字="张三" 年龄="13" 性别="男">
<学生 名字="李四" 年龄="13" 性别="男">
<成绩 语文="88" 数学="89" 英语="95">
<成绩 语文="93" 数学="82" 英语="85">
</班级>
<班级 班号="1" 名字="黄老师" 年龄="38" 性别="女">
<学生 名字="小娟" 年龄="13" 性别="女">
<学生 名字="小芬" 年龄="13" 性别="女">
<成绩 语文="98" 数学="95" 英语="100">
<成绩 语文="93" 数学="92" 英语="98">
</班级>
</学校>
</考核表>我想要读取 考核表-学校-班级-名字 (得出'陈老师')再读取下一条考核表-学校-班级-名字 (得出'黄老师')考核表-学校-班级-学生-名字 (得出‘张三’)再读取下一条考核表-学校-班级-学生-名字 (得出‘李四’)
<年级>
<班级 班号= "0" 名字= "陈老师" />
<班级 班号= "1" 名字= "黄老师" />
</年级>
<学校>
<班级 班号="0" 名字="陈老师" 年龄="33" 性别="男">
<学生 名字="张三" 年龄="13" 性别="男">
<学生 名字="李四" 年龄="13" 性别="男">
<成绩 语文="88" 数学="89" 英语="95">
<成绩 语文="93" 数学="82" 英语="85">
</班级>
<班级 班号="1" 名字="黄老师" 年龄="38" 性别="女">
<学生 名字="小娟" 年龄="13" 性别="女">
<学生 名字="小芬" 年龄="13" 性别="女">
<成绩 语文="98" 数学="95" 英语="100">
<成绩 语文="93" 数学="92" 英语="98">
</班级>
</学校>
</考核表>我想要读取 考核表-学校-班级-名字 (得出'陈老师')再读取下一条考核表-学校-班级-名字 (得出'黄老师')考核表-学校-班级-学生-名字 (得出‘张三’)再读取下一条考核表-学校-班级-学生-名字 (得出‘李四’)
通过关键字截取。
比如"<考核表","</考核表>"
得到的字符串,继续找关键字再截取。
待会发几个常用的截取函数给你哈
#==========================================================
#功能: 返回两个字符串之间的字串
#参数: cStringStr 要截取的字符串
# StartStr 起始的字符串
# EndStr 截止的字符串
#返回: 字符型 截取后的字符串
#==========================================================
*)
function SubStr(cStringStr, StartStr, EndStr: string): string;
var
iStart, iEnd: Longint;
begin
//iStart := pos(StartStr, cStringStr);
iStart := RightPos(StartStr, cStringStr); //返回指明字串StartStr在字串cStringStr中的iStartPosz之后的位置
if iStart = 0 then
begin
SubStr := ' ';
Exit;
end; //返回指明字串EndStr在字串cStringStr中的位置
iEnd := Pos(EndStr, cStringStr); if iEnd = iStart then
begin
SubStr := ' ';
Exit;
end; //截取字串
if iEnd = 0 then
begin
SubStr := ' ';
exit;
end
else
SubStr := MidBStr(cStringStr, iStart + length(StartStr), iEnd - iStart - Length(StartStr)); end;(*
#==========================================================
#功能: 返回两个字符串之间的字串
#参数: cStringStr 要截取的字符串
# StartStr 起始的字符串
# EndStr 截止的字符串
#返回: 字符型 截取后的字符串 (截取最右边EndStr,EndStr左边最近的StartStr,中间部分)
#==========================================================
*)
function SubStrExR(cStringStr, StartStr, EndStr: string): string;
var
iStart, iEnd: Longint;
TemStr:string;
begin
//返回指明字串EndStr在字串cStringStr中的位置
iEnd := Pos(EndStr, cStringStr); TemStr := Copy(cStringStr,1,iEnd); //iStart := pos(StartStr, cStringStr);
iStart := RightPos(StartStr, TemStr); //返回指明字串StartStr在字串cStringStr中的iStartPosz之后的位置
if iStart = 0 then
begin
SubStrExR := ' ';
Exit;
end; if iEnd = iStart then
begin
SubStrExR := ' ';
Exit;
end; //截取字串
if iEnd = 0 then
begin
SubStrExR := ' ';
exit;
end
else
SubStrExR := MidBStr(cStringStr, iStart + length(StartStr), iEnd - iStart - Length(StartStr));
end;(*
#==========================================================
#功能: 返回两个字符串之间的字串
#参数: cStringStr 要截取的字符串
# StartStr 起始的字符串
# EndStr 截止的字符串
#返回: 字符型 截取后的字符串 (截取最左边StartStr,StartStr右边最近的EndStr,中间部分)
#==========================================================
*)
function SubStrExL(cStringStr, StartStr, EndStr: string): string;
var
iStart, iEnd: Longint;
TemStr:string;
begin
iStart := pos(StartStr, cStringStr); TemStr := copy(cStringStr,iStart+length(StartStr)+1,length(cStringStr)-(iStart+length(StartStr))); //返回指明字串EndStr在字串cStringStr中的位置
iEnd := iStart+length(StartStr) + Pos(EndStr, TemStr);
//返回指明字串StartStr在字串cStringStr中的iStartPosz之后的位置
if iStart = 0 then
begin
SubStrExL := ' ';
Exit;
end; if iEnd = iStart then
begin
SubStrExL := ' ';
Exit;
end; //截取字串
if iEnd = 0 then
begin
SubStrExL := ' ';
exit;
end
else
SubStrExL := MidBStr(cStringStr, iStart + length(StartStr), iEnd - iStart - Length(StartStr));
end;
(*
#==========================================================
#功能: 返回两个字符串之间的字串
#参数: cStringStr 要截取的字符串
# StartStr 起始的字符串
# EndStr 截止的字符串
#返回: 字符型 截取后的字符串
#==========================================================
*)
function SubStr(cStringStr, StartStr, EndStr: string): string;
var
iStart, iEnd: Longint;
begin
//iStart := pos(StartStr, cStringStr);
iStart := RightPos(StartStr, cStringStr); //返回指明字串StartStr在字串cStringStr中的iStartPosz之后的位置
if iStart = 0 then
begin
SubStr := ' ';
Exit;
end; //返回指明字串EndStr在字串cStringStr中的位置
iEnd := Pos(EndStr, cStringStr); if iEnd = iStart then
begin
SubStr := ' ';
Exit;
end; //截取字串
if iEnd = 0 then
begin
SubStr := ' ';
exit;
end
else
SubStr := MidBStr(cStringStr, iStart + length(StartStr), iEnd - iStart - Length(StartStr)); end;(*
#==========================================================
#功能: 返回两个字符串之间的字串
#参数: cStringStr 要截取的字符串
# StartStr 起始的字符串
# EndStr 截止的字符串
#返回: 字符型 截取后的字符串 (截取最右边EndStr,EndStr左边最近的StartStr,中间部分)
#==========================================================
*)
function SubStrExR(cStringStr, StartStr, EndStr: string): string;
var
iStart, iEnd: Longint;
TemStr:string;
begin
//返回指明字串EndStr在字串cStringStr中的位置
iEnd := Pos(EndStr, cStringStr); TemStr := Copy(cStringStr,1,iEnd); //iStart := pos(StartStr, cStringStr);
iStart := RightPos(StartStr, TemStr); //返回指明字串StartStr在字串cStringStr中的iStartPosz之后的位置
if iStart = 0 then
begin
SubStrExR := ' ';
Exit;
end; if iEnd = iStart then
begin
SubStrExR := ' ';
Exit;
end; //截取字串
if iEnd = 0 then
begin
SubStrExR := ' ';
exit;
end
else
SubStrExR := MidBStr(cStringStr, iStart + length(StartStr), iEnd - iStart - Length(StartStr));
end;(*
#==========================================================
#功能: 返回两个字符串之间的字串
#参数: cStringStr 要截取的字符串
# StartStr 起始的字符串
# EndStr 截止的字符串
#返回: 字符型 截取后的字符串 (截取最左边StartStr,StartStr右边最近的EndStr,中间部分)
#==========================================================
*)
function SubStrExL(cStringStr, StartStr, EndStr: string): string;
var
iStart, iEnd: Longint;
TemStr:string;
begin
iStart := pos(StartStr, cStringStr); TemStr := copy(cStringStr,iStart+length(StartStr)+1,length(cStringStr)-(iStart+length(StartStr))); //返回指明字串EndStr在字串cStringStr中的位置
iEnd := iStart+length(StartStr) + Pos(EndStr, TemStr);
//返回指明字串StartStr在字串cStringStr中的iStartPosz之后的位置
if iStart = 0 then
begin
SubStrExL := ' ';
Exit;
end; if iEnd = iStart then
begin
SubStrExL := ' ';
Exit;
end; //截取字串
if iEnd = 0 then
begin
SubStrExL := ' ';
exit;
end
else
SubStrExL := MidBStr(cStringStr, iStart + length(StartStr), iEnd - iStart - Length(StartStr));
end;
NativeXml 这个组件不错!方便实用、开源免费,我正在使用!
他们的官网是:
http://www.simdesign.nl/xml.html
begin
Result := Pos(ReverseString(Substr),ReverseString(S));
if Result > 0 then
Result := Length(S) - Result + 1 - Length(Substr) + 1;
end;
Pos,copy,MidBStr,RightPos这类函数倒来倒去的
已经习惯尽量只能Delphi自带的控件了,呵呵。经常用第三方控件可能会出现不可预知的问题,
并且一套代码过来先要装一堆控件才能编译,太麻烦了,只要有一个控件失传,整套代码都可能呆掉。