从 html 片段中提取内容

extract content from html snippet

我有以下代码片段,我正在寻找一种更好的方法来解析姓氏。

<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

我有以下内容,但我很确定我可以做到这一点而无需进行替换。我在下面要做的是找到起点,找到终点,然后取中间的文本。然后,一旦我有了它,就删除 "matched" 文本,留下输入字段的值。

<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 清理它的任何提示?这是一项道德操守。

是的,我确实尝试格式化它。

我支持 尝试使用 JSoup。它通常运行良好,并且使用起来非常简单。

Download the 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() 抓取 第一个 匹配元素的文本。如果找不到该元素,它 returns 一个空字符串。

您可以在 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>

结果: