【发布时间】:2020-07-19 00:18:57
【问题描述】:
好的,所以我一直用头撞这个有一段时间了,但无济于事。我一直在尝试获取变量的内容并将包含的字符串解析为部分,然后将这些部分提取到 5 个单独的变量中。看起来很简单吧?好吧,至少对我来说,这根本不简单。
所以我有一个变量 (PageContent),其中包含来自 CFHTTP 请求的修剪内容。 PageContent 变量现在包含:
<tdnowrapalign=right>07/18/2020 13:00</td>
<tdalign=right>1002.12</td>
<tdalign=right>2,874,887</td>
<tdalign=right>12,766</td>
<tdalign=right>13,038</td>
似乎应该有一种简单的方法来编写一个循环,该循环将遍历“PageContent”变量中的标签,将每个标签的内容分配给不同的变量。但是,我尝试解析变量中的数据的每一种方式,我要么得到一个错误(复杂对象类型不能转换为简单值。)要么我最终得到了我最初在“PageContent”变量中的内容,在循环中重复.
例如,如果我有一个循环将运行 5 次迭代,并且可以获取将每个标记分配给变量的内容,那么所需的结果将是:
DateTime = "07/18/2020 13:00"
Elevation = "1002.12"
Storage = "2,874,887"
Outflow = "12,766"
Inflow = "13,038"
在尝试了我可以在这里和其他地方在线找到的每个示例之后,我现在正在进行第 100 次尝试。现在我正在尝试使用正则表达式来获取标签的内容并将它们分配给变量,但那里没有运气。我最终得到的是将 PageContent 变量的全部内容填充到每个变量中。结果并不出人意料,因为我不知道如何区分 3 个相同的“tdalign”标签,但似乎至少第一个变量会起作用,因为标签是不同的“tdnowrapalign”。
<cfset i=5/>
<cfloop index = "LoopCount" from = "1" to = #i#>
<cfif i EQ 1>
<cfset dataDateTime = Replace(PageContent, "<[tdnowrapalign][^>]*>(.+?)</[td]>","","ALL")>
<cfelseif i EQ 2>
<cfset elevation = Replace(PageContent, "<[tdalign][^>]*>(.+?)</[td]>","","ALL")>
<cfelseif i EQ 3>
<cfset storage = Replace(PageContent, "<[tdalign][^>]*>(.+?)</[td]>","","ALL")>
<cfelseif i EQ 4>
<cfset outflow = Replace(PageContent, "<[tdalign][^>]*>(.+?)</[td]>","","ALL")>
<cfelseif i EQ 5>
<cfset inflow = Replace(PageContent, "<[tdalign][^>]*>(.+?)</[td]>","","ALL")>
</cfif>
<cfoutput>
<cfif isdefined("dataDateTime")>
dataDateTime = #dataDateTime#<br>
</cfif>
<cfif isdefined("elevation")>
elevation = #elevation#<br>
</cfif>
<cfif isdefined("storage")>
storage = #storage#<br>
</cfif>
<cfif isdefined("outflow")>
outflow = #outflow#<br>
</cfif>
<cfif isdefined("inflow")>
inflow = #inflow#<br>
</cfif>
</cfoutput>
<cfset i = i - 1>
</cfloop>
有谁知道是否有办法达到我所描述的预期结果,其中我最终得到 5 个变量,其中包含“PageContent”变量中包含的标签的内容?
【问题讨论】:
-
这是您要找的吗? bennadel.com/blog/…
-
正则表达式或列表函数可能适用于这种特定情况,但可能会与其他情况发生冲突。特别是如果屏幕抓取易失性内容。如需更广泛的使用,请尝试 JSoup。
标签: regex parsing coldfusion