|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
ASP最大的缺点在于网络的安全性和可靠性,企业将经营数据放在开放的平台上,最大的担忧就是如何保证这些数据不被其他人破坏。web|xml|数据|数据源|页面|转换 本文将为你供应了一个壮大而天真的办法,旨在从现有的HTML文件中提取并组分解成心义的数据。
HTML和Web已永久地改动了人们通讯与沟通的体例,HTML对人们来讲很便利,它使得信息更容易于检查和飞行,但遗憾的是,它对盘算机之间的交换就远远没有那末便利了:Web页面上因为层的完成代码,使得盘算机体系都难以找到和利用数据。这时候,XML应运而生,它许诺要对盘算机体系之间通讯的体例起到一样的感化,XML将成为信息在分歧盘算机体系之间活动的公用言语。使用本文中引见的复杂编程手艺,你可以将任何HTML页面转换成一个XML数据源。
例程申明
想象有一个花店,每一个礼拜都要依据价钱从3个鲜花零售商中的一个进货。每一个礼拜,东主都要检查每一个零售商的Web站点来找到最低的价钱。东主想把这三个零售商的价钱信息都组合到一个Web页面中来简化他搜刮的进程。
上面就示范若何从3个Web页面中提守信息而且将它们联合到一个单一的XML文档中。咱们为这个例子创立了3个鲜花零售商的页面:
<>
<>
<>
出于示范目标,每次会见页面时,每一个页面上的价钱城市改动。别的,因为Web页面常常会把相干数据放在HTML表格中,样本页面和使用法式将侧重从表格中而不是从其它标志中恢覆信息。
处理计划
下表包括了一个含有你需求的数据的样本XML文件Flowers.xml:
<Flowers><Flower><Vendor>FakeFlowers</Vendor><Name>Daffodil</Name>
<Price>$2.00</Price></Flower>
<Flower><Vendor>FictitiousFlowers</Vendor><Name>Daffodil</Name><Price>$5.00</Price>
</Flower>
<Flower><Vendor>PretendFlowers</Vendor>
<Name>Daffodil</Name><Price>$3.50</Price></Flower>
</Flowers>
如今你需求编写代码,直接从响应的零售商Web站点中提取鲜花的称号和价钱。一个处理计划是在XML文档中放置特别的标志,今后用站点中的值来取代。这类办法与XSL不异。要想如许做,你可以界说一个新的元言语,它可以让你向XML中增添可交换的标志。
这个新的元言语需求完成以下义务:
辨认文档,以便晓得它是在利用这个言语
供应一个办法,以指定包括着你想恢单数据的Web页面
指定若何从每一个页面恢复特定的数据元素。上面的例子提取前一个XML文件,而且包括了新的元言语标志来完成下面所罗列的3个方针:
<WG:Documentxmlns:WG="">
<Flowers>
<WG:Templateurl="">
<Flower>
<Vendor>FakeFlowers</Vendor>
<Name><WG:GetTableElementpos="1"row="8"col="1"/></Name>
<Price><WG:GetTableElementpos="1"row="8"col="4"/></Price>
</Flower>
</WG:Template>
<WG:Templateurl="">
<Flower>
<Vendor>FictitiousFlowers</Vendor>
<Name><WG:GetTableElementpos="1"row="6"col="2"/></Name>
<Price><WG:GetTableElementpos="1"row="6"col="3"/></Price>
</Flower>
</WG:Template>
<WG:Templateurl="">
<Flower>
<Vendor>PretendFlowers</Vendor>
<Name><WG:GetTableElementpos="1"row="3"col="1"/></Name>
<Price><WG:GetTableElementpos="1"row="3"col="4"/></Price>
</Flower>
</WG:Template>
</Flowers>
</WG:Document>
第二个XML例子有一个包裹元素叫做Document,放置在原始XML的两端。Document元素为这个叫做WebGather的新元言语界说了称号空间。WebGatherSchema.xml文件中界说了WebGather言语元素:
<!WebGatherschema-->
<Schemaxmlns="urn:schemas-microsoft-com:xml-data">
<elementtype='Document'>
<elementtype='Template'>
<attributetype='url'/>
<elementtype='GetTableElement'>
<attributetype='pos'/>
<attributetype='row'/>
<attributetype='col'/>
</element>
</element>
</element>
</Schema>
WebGatherschema答应利用三品种型的XML元素:Template(模板)元素只要一个属性"URL",它界说了包括数据的源Web页面。GetTableElement标志是一个在Template元素中界说的页面内表格中一个单位的内容占位符。GetTableElement标志有三个属性,第一个属性叫做"pos",它界说了HTMLWeb页面中表格元素的索引号,个中第一个表格就是1;"row"和"col"属性界说了包括数据的表格中的单位。
详细完成
元言语需求履行才干起感化。我利用了一个VisualBasicDLL工程文件,个中只包括了一个类叫做MetaGather。这个类利用了一个公共办法,叫做Transform,它吸收一个XML字符串,个中包括WebGather标志,它代替带有来自指定Web页面值的那些标志,生成XML字符串。这个类利用了MicrosoftInternetExplorer控件来恢复Web页面,并从XML字符串参数中的Template标志中读取包括数据的页面URL。
PrivateFunctionLoadPage_
(ByValstrURLAsString)AsBoolean
'Initializethedownloadcompleteflag
m_bDownloadComplete=False
'Loadthepagetomakesureits
'notthecachedversion
m_IE.NavigatestrURL,4
'Waituntildocumentfinishesloading
Whilem_IE.ReadyState<>READYSTATE_COMPLETE
DoEvents
Wend
'Checkifyouendedupontheerrorpage
Ifm_IE.Document.Title=_
"Thepagecannotbefound"Or_
m_IE.Document.Title="Nopagetodisplay"_
Then
LoadPage=False
Else
LoadPage=True
EndIf
EndFunction
LoadPage函数挪用MicrosoftInternet控件的Navigate办法从Internet中取回页面内容。Navigate任务体例是分歧步的,因而在持续之前必需要守候页面装载。这可以经由过程利用一个轮回以守候一个模块级其余标记设置完成来完成。DownloadComplete事务被激活时,这个标记就被设置。凡是Navigate办法被挪用时,DownloadComplete事务就被激活。如许一来,即便是导航掉败,也能包管这个标记终究会被设置为真,然后咱们就加入轮回。ASP最大的缺点在于网络的安全性和可靠性,企业将经营数据放在开放的平台上,最大的担忧就是如何保证这些数据不被其他人破坏。 |
|