各位兄弟怎么把下面的字符串转成第二种形式,我的办法感觉很不灵活,谁能写出比较优的转化?谢谢了
<?xml version="1.0" encoding="GB2312" standalone="yes"?>
<DATAPACKET Version="2.0">
<METADATA>
<FIELDS>
<FIELD attrname="XM" fieldtype="string" WIDTH="4"/> 转化后此行不要
<FIELD attrname="XM" fieldtype="bin.hex" SUBTYPE="Binary"/>
</FIELDS>
<PARAMS READONLY="TRUE"/>
</METADATA>
<ROWDATA>
<ROW XM="张三" ZP="/9yuhi/"/> 转化后XM="张三"不要
<ROW XM="李四" ZP="/9jfde/"/> 转化后XM="李四"不要
</ROWDATA>
</DATAPACKET>转化为的格式是
<?xml version="1.0" encoding="GB2312" standalone="yes"?>
<DATAPACKET Version="2.0">
<METADATA>
<FIELDS>
<FIELD attrname="XM" fieldtype="bin.hex" SUBTYPE="Binary"/>
</FIELDS>
<PARAMS READONLY="TRUE"/>
</METADATA>
<ROWDATA>
<ROW ZP="/9yuhi/"/>
<ROW ZP="/9jfde/"/>
</ROWDATA>
</DATAPACKET>诸如<ROW XM="李四" ZP="/9jfde/"/>的个数是不定的,要根据实际输入的判断。
<?xml version="1.0" encoding="GB2312" standalone="yes"?>
<DATAPACKET Version="2.0">
<METADATA>
<FIELDS>
<FIELD attrname="XM" fieldtype="string" WIDTH="4"/> 转化后此行不要
<FIELD attrname="XM" fieldtype="bin.hex" SUBTYPE="Binary"/>
</FIELDS>
<PARAMS READONLY="TRUE"/>
</METADATA>
<ROWDATA>
<ROW XM="张三" ZP="/9yuhi/"/> 转化后XM="张三"不要
<ROW XM="李四" ZP="/9jfde/"/> 转化后XM="李四"不要
</ROWDATA>
</DATAPACKET>转化为的格式是
<?xml version="1.0" encoding="GB2312" standalone="yes"?>
<DATAPACKET Version="2.0">
<METADATA>
<FIELDS>
<FIELD attrname="XM" fieldtype="bin.hex" SUBTYPE="Binary"/>
</FIELDS>
<PARAMS READONLY="TRUE"/>
</METADATA>
<ROWDATA>
<ROW ZP="/9yuhi/"/>
<ROW ZP="/9jfde/"/>
</ROWDATA>
</DATAPACKET>诸如<ROW XM="李四" ZP="/9jfde/"/>的个数是不定的,要根据实际输入的判断。
index:=pos('Z',s);
delete(s,5,index-6);
如果有 XM 这样的字串,则将行中含有 XM的一段删除var
StrText:Tstrings;
StrRow:TStrings;
i,j:integer;
begin
StrText:=TstringList.create;
StrRow:=TStringlist.create;
StrRow.daLimiter:=' '; //因为每一行中用空格分开,你要删除的实际是两个空行中的一段
Strtext.add(.......)//将文本存入StrTEXT中,每行作为一个字符串;
for i:=0 to strtext.count-1 do
begin
if substring('"xm"',Strtext.strings[i]) then//查找子串,子串具体函数忘了
STRtext.strings[I]:='' //也可直接删除
else //如果不含 “XM” 则查找是否含有 XM
strrow.dalimitedtext:=strtext.strings[i];
for j:=0 to strrow.count-1 do
begin
if substring('xm',strrow.strings[j] then
strrow.delete(j); //删除该段
end;
strtext.strings[i]:=strrow.dalimitedtext; end;
//将strtext 写回到相应的文本中
strtext.free;
strRow.free;end;
//把<FIELD **** "XM" **** /> 替换为空字串
//var RegExp1 : RegExp;
RegExp1 := CoRegExp.Create();
RegExp1.Pattern := '<FIELD.+"XM".+/>';
RegExp1.IgnoreCase := true;
RegExp1.Global := true;
str := RegExp1.Replace(strText,'');
ShowMessage(str);
RegExp1 := nil;