coldfusion - 从 html 片段中提取内容
问题描述
我有以下代码片段,我正在寻找一种更好的方法来解析姓氏。
<TABLE BORDER="0" class="info" width="560">
<TR>
<TD VALIGN="top"> <B>First Name<B></FONT> </TD>
<TD VALIGN="top"> <INPUT TYPE="text" NAME="First_Name" SIZE="16" value="Ashley"> </TD>
<TD VALIGN="top"> <B>Last Name<B></FONT> </TD>
<TD VALIGN="top"> <INPUT TYPE="text" NAME="Last_Name" SIZE="16" value="Smith"> </TD>
</TR>
<tr>
<TD VALIGN="top" colspan="2"> <B>Company Name (if any):<B></FONT> </TD>
<TD VALIGN="top" colspan="2"> <INPUT TYPE="text" NAME="Company_Name" SIZE="24" value=""> </TD>
</tr>
<TR>
<TD VALIGN="top" colspan=2> <B>Address<B></FONT> </TD>
<TD VALIGN="top" colspan=2> <INPUT TYPE="text" NAME="Address" SIZE="24" value="123 Any Street Circle "> </TD>
</TR>
<tr>
<TD VALIGN="top" colspan=2> <B>City <B></FONT> <INPUT type="text" id="City" name="City" SIZE="14" value="Shady Town"> </TD>
<TD colspan="2" VALIGN="top"> <B>State<B></FONT> <INPUT type="text" id=State name=State SIZE="4" value="Tx"> <B>Zip<B></FONT> <INPUT type="text" id=Zip name=Zip SIZE="8
我有以下内容,但我很确定我可以做到这一点而无需进行更换。我在下面要做的是找到起点,找到终点,然后在两者之间获取文本。然后,一旦我有了它,删除“匹配”文本,留下输入字段的值。
<cfset LastName_start = findNoCase('<INPUT TYPE="text" NAME="Last_Name" SIZE="16" value="', theString, 0)>
#lastName_start#
<cfset LastName_end = findNoCase('">', theString, 0)> #lastName_end#
<cfset lastNameValue = '#Mid(theString,LastName_start,LastName_end)#'>
#lastNameValue#
<cfset lastNameValue = replace(lastNameValue, '<INPUT TYPE="text" NAME="Last_Name" SIZE="16" value="', '')>
<cfset lastNameValue = replace(lastNameValue, '">', '')>
<cfset lastNameValue = listFirst(lastNameValue,'"')>
<cfdump var="#lastNameValue#" label="lastNameValue">
关于如何使用 ColdFusion 进行清理的任何提示?这是一种道德操练。
是的,我确实尝试过格式化。
解决方案
我赞同 Scott Stroz关于尝试 JSoup 的建议。它通常运行良好,并且使用起来非常简单。
下载 JSoup jar并将其加载到 Application.cfc 中。
component {
this.name = "MyApplication";
this.javaSettings = { loadPaths = ["C:\path\to\jsoup-1.12.1.jar"] };
// ... more application settings
}
创建一个 JSoup 实例,解析 HTML 字符串并用于val()
获取第一个匹配元素的文本。如果未找到该元素,则返回一个空字符串。
您可以在JSoup Cookbook中找到许多其他有用的示例。
<cfscript>
yourHTMLString = '<TABLE BORDER="0" class="info" ......';
// parse html
jsoup = createObject("java", "org.jsoup.Jsoup");
root = jsoup.parse( yourHTMLString );
// get the first matching value ...
lastName = root.select("input[name='Last_Name']").val();
firstName = root.select("input[name='First_Name']").val();
companyName = root.select("input[name='Company_Name']").val();
cityName = root.select("input[name='City']").val();
stateName = root.select("input[name='State']").val();
address = root.select("input[name='Address']").val();
</cfscript>
结果:
推荐阅读
- php - 如何通过php函数导出mysql数据库中某些表中的某些行?
- google-earth-engine - 如何在谷歌地球引擎中计算时间序列图像的区域统计?
- hyperlink - 如何在使用 LinkTransformator 时管理内部页面的锚点(带有主题标签的链接)?
- c# - 如何有效地将属性作为列表从 IReadOnlyCollection 获取?
- python-3.x - Python3.7 子进程输出到终端但没有收到 SIGINT
- sql - SQL Server - 将 column_id 设置为外键
- reinforcement-learning - 困难的强化学习查询
- python - 多重继承未按预期工作
- c++ - C++ std::vector 插入两个元素替代算法失败
- python - 如何更改此画布上此饼图的位置?