从通过Indy检索的页面源中获取HTML表单中的默认表单值的最简单方法?

时间:2018-07-25 11:57:59

标签: delphi indy

我想在网站上修改我的个人资料信息,因此我正在使用Indy。我的问题是:当我(通过Indy)获取个人资料页面的内容时,该页面将具有一个表单,其中所有先前填写的信息均已检查/完成。如果要更改该信息,则必须发布(通过Indy)所有先前(未更改)的值和已更改的值,否则,如果仅发布我要更改的值,则未更改的值将被注册为空且从而使我的个人资料无效。我的问题是,是否有一种简单的方法可以从表单的HTML获取预填充的值,以便我可以将它们重新发布(并在需要时进行修改)?

1 个答案:

答案 0 :(得分:1)

您可以为此使用https://github.com/Zeus64/alcinoe字符串组件,这非常简单,您需要使用:

function  ALFastTagReplace(const SourceString, TagStart, TagEnd: AnsiString;
                           ReplaceExtendedProc: TALHandleTagExtendedfunct;
                           StripParamQuotes: Boolean;
                           ExtData: Pointer;
                           Const flags: TReplaceFlags=[rfreplaceall];
                           const TagReplaceProcResult: Boolean = False): AnsiString; overload;

示例:

 ALFastTagReplace(MyHtmlString, // Const SourceString, 
                  '<input' // TagStart, 
                   '>', // TagEnd: AnsiString;
                   function(const TagString: AnsiString;
                                   TagParams: TALStrings;
                                   ExtData: pointer;
                                   Var Handled: Boolean;
                                   Const SourceString: AnsiString;
                                   Var TagPosition, TagLength: integer): AnsiString;
                   begin
                     Myprefilledvalues.add(TagString + '=' + TagParams.values['value'])
                   end,
                   true, // StripParamQuotes 
                   nil); // ExtData