转换数据以形成名称与对的范围(Converting data to form scope with name & pair)

编程入门 行业动态 更新时间:2024-10-25 18:24:27
转换数据以形成名称与对的范围(Converting data to form scope with name & pair)

我正在努力拼凑一个网站。 我设法得到我需要的内容,这是一个HTML表格,如下所示:

<table id="warranty-information"> <tr> <th colspan="2" class="ui-corner-top">Warranty Information</th> </tr> <tr> <td style="vertical-align: top;">Warranty</td> <td style="vertical-align: top;">2 Years</td> </tr> <tr> <th colspan="2" class="ui-corner-top">Hardware</th> </tr> <tr> <td style="vertical-align: top;">Adapter Style</td> <td style="vertical-align: top;">Cable Adapters</td> </tr> <tr> <td style="vertical-align: top;">Converter Type</td> <td style="vertical-align: top;">Cable Adapters</td> </tr> <tr> <td style="vertical-align: top;">Output Signal</td> <td style="vertical-align: top;">DisplayPort</td> </tr> </table>

我想将<TR> as a named input field whose value is the text inside the的第一个<TD>显示<TR> as a named input field whose value is the text inside the `block中<TR> as a named input field whose value is the text inside the 。

我还想显示第二个输入字段,其值来自第二个<TD>块,但是在如何执行此操作时丢失了。

利用像flattenSruct()和ConvertXMLtoStruct()这样的cflib中的一些函数,这是我迄今为止所尝试的:

<cfset regExp = REMatch('(?s)<div class="tab-pane" id="tchspcs".*?</div>',str)> <cfset regData = Replace(regExp[1],'<br> ','-','all')> <cfset xhtm = Application.jtidy.makexHTMLValid(strToParse='#regData#')> <cfset xhtml = Replace(xhtm,'<br />','-','all')> <cfset getdataStructs = Application.ftSys.ConvertXmlToStruct(XMLParse(xhtml))> <cfdump var="#xhtml#"> <cfset ApiData = getdataStructs.div.table.tr> <table align="center" width="100%"> <cfloop from="1" to="#arrayLen(ApiData)#" index="i"> <cfset data = Application.ftSys.flattenStruct(ApiData[i])> <cfloop collection="#data#" item="key"> <cfoutput> <cfif key eq 'td'> <tr> <!---<cfif trim(data[key][1]) NEQ "">---> <cfdump var="#data[key]#"> <td><input type="text" name="namespecification" id="namespecification" value="#data[key][1]#"></td> <!---</cfif>---> <td><textarea name="valuespecification" id="valuespecification" rows="5">#data[key][2]#</textarea></td> <!---#key#:#data[key]#---> </tr> </cfif> </cfoutput> </cfloop> </cfloop> </table>

我循环遍历一个结构数组,但是一些数组是空的,每个数组都是单个实体,如2的组合:

I'm working on scraping a website. I have managed to get the contents of what I need, which is an HTML table like this:

<table id="warranty-information"> <tr> <th colspan="2" class="ui-corner-top">Warranty Information</th> </tr> <tr> <td style="vertical-align: top;">Warranty</td> <td style="vertical-align: top;">2 Years</td> </tr> <tr> <th colspan="2" class="ui-corner-top">Hardware</th> </tr> <tr> <td style="vertical-align: top;">Adapter Style</td> <td style="vertical-align: top;">Cable Adapters</td> </tr> <tr> <td style="vertical-align: top;">Converter Type</td> <td style="vertical-align: top;">Cable Adapters</td> </tr> <tr> <td style="vertical-align: top;">Output Signal</td> <td style="vertical-align: top;">DisplayPort</td> </tr> </table>

I want to display the first <TD> of a <TR> as a named input field whose value is the text inside the` block.

I also want to display a second input field with value from 2nd <TD> block, but am lost as to how to do this.

Making use of a few functions from cflib like flattenSruct() and ConvertXMLtoStruct(), this is what I've tried so far:

<cfset regExp = REMatch('(?s)<div class="tab-pane" id="tchspcs".*?</div>',str)> <cfset regData = Replace(regExp[1],'<br> ','-','all')> <cfset xhtm = Application.jtidy.makexHTMLValid(strToParse='#regData#')> <cfset xhtml = Replace(xhtm,'<br />','-','all')> <cfset getdataStructs = Application.ftSys.ConvertXmlToStruct(XMLParse(xhtml))> <cfdump var="#xhtml#"> <cfset ApiData = getdataStructs.div.table.tr> <table align="center" width="100%"> <cfloop from="1" to="#arrayLen(ApiData)#" index="i"> <cfset data = Application.ftSys.flattenStruct(ApiData[i])> <cfloop collection="#data#" item="key"> <cfoutput> <cfif key eq 'td'> <tr> <!---<cfif trim(data[key][1]) NEQ "">---> <cfdump var="#data[key]#"> <td><input type="text" name="namespecification" id="namespecification" value="#data[key][1]#"></td> <!---</cfif>---> <td><textarea name="valuespecification" id="valuespecification" rows="5">#data[key][2]#</textarea></td> <!---#key#:#data[key]#---> </tr> </cfif> </cfoutput> </cfloop> </cfloop> </table>

I am looping through an array of structures, but a few of the arrays are empty and every array is coming as single entity like this combination of 2:

最满意答案

这应该给你你想要的:

results.fileContent = FileRead(ExpandPath("test.html")); loadPaths = ArrayNew(1); loadPaths[1] = GetDirectoryFromPath(GetCurrentTemplatePath()) & "cfcs/jar/jsoup-1.10.2.jar"; loaderObj = createObject("component", "cfcs.javaloader.JavaLoader").init(loadPaths); jsoup = loaderObj.create("org.jsoup.Jsoup"); doc = jsoup.parse(results.fileContent); table = doc.select("##warranty-information"); trs = table.select("tr"); for(i = 0; i < trs.size(); i++) { tds = trs.get(i).select("td"); if( tds.size() ) { form[ tds.get(0).text() ] = tds.get(1).text(); } } WriteDump(form);

这假定你的HTML存储在一个文件(test.html)中,如下所示:

<table id="warranty-information"> <tr> <th colspan="2" class="ui-corner-top">Warranty Information</th> </tr> <tr> <td style="vertical-align: top;">Warranty</td> <td style="vertical-align: top;">2 Years</td> </tr> <tr> <th colspan="2" class="ui-corner-top">Hardware</th> </tr> <tr> <td style="vertical-align: top;">Adapter Style</td> <td style="vertical-align: top;">Cable Adapters</td> </tr> <tr> <td style="vertical-align: top;">Converter Type</td> <td style="vertical-align: top;">Cable Adapters</td> </tr> <tr> <td style="vertical-align: top;">Output Signal</td> <td style="vertical-align: top;">DisplayPort</td> </tr> </table>

This should give you what you want:

results.fileContent = FileRead(ExpandPath("test.html")); loadPaths = ArrayNew(1); loadPaths[1] = GetDirectoryFromPath(GetCurrentTemplatePath()) & "cfcs/jar/jsoup-1.10.2.jar"; loaderObj = createObject("component", "cfcs.javaloader.JavaLoader").init(loadPaths); jsoup = loaderObj.create("org.jsoup.Jsoup"); doc = jsoup.parse(results.fileContent); table = doc.select("##warranty-information"); trs = table.select("tr"); for(i = 0; i < trs.size(); i++) { tds = trs.get(i).select("td"); if( tds.size() ) { form[ tds.get(0).text() ] = tds.get(1).text(); } } WriteDump(form);

This assumes your HTML is stored in an file (test.html) like this:

<table id="warranty-information"> <tr> <th colspan="2" class="ui-corner-top">Warranty Information</th> </tr> <tr> <td style="vertical-align: top;">Warranty</td> <td style="vertical-align: top;">2 Years</td> </tr> <tr> <th colspan="2" class="ui-corner-top">Hardware</th> </tr> <tr> <td style="vertical-align: top;">Adapter Style</td> <td style="vertical-align: top;">Cable Adapters</td> </tr> <tr> <td style="vertical-align: top;">Converter Type</td> <td style="vertical-align: top;">Cable Adapters</td> </tr> <tr> <td style="vertical-align: top;">Output Signal</td> <td style="vertical-align: top;">DisplayPort</td> </tr> </table>

更多推荐

本文发布于:2023-08-06 02:28:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1442137.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:名称   Converting   data   pair   scope

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!