首页 > 解决方案 > 从 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 进行清理的任何提示?这是一种道德操练。

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

标签: 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>

结果:

提取值的图像


推荐阅读