将Web页面转换成XML数据源

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事件就被激活。这样一来即使是导航失败也能保证这个标志最终会被设置为真然后我们就退出循环。

时间: 2024-08-03 13:32:31

将Web页面转换成XML数据源的相关文章

利用XSLT把ADO记录集转换成XML

ado|xml|记录集|转换 由于XML(可扩展标记语言:eXtensible Markup Language)真正的平台无关性,它正在逐渐成为数据传输的主要介质.XML是一种自描述的语言,数据本身就已经包含了元数据,即关于数据本身的信息.例如:"孟子E章1757281793923net_lover1807581793923"这组数据,从字面很难看出它代表什么意思,也不清楚它有几个数据段组成,但是,如果用XML来做如下的描述,我们就可以清楚地看到每个数据段所代表的含义:  <Pe

将 HTML 文件转换成 XML

xml|转换 在 Java 专家 Michael Geisler 为 Builder 澳大利亚写的第一篇文章中,他向读者展示了如何使用 JTidy 将 HTML 文件转换成 XML. 有关 Java 的最重要的事情是有很多扩展标准库可以作为标准平台的一部分,而且在那些库中有对 XML 提供了非常多的支持.然而对于某些特定的需要,在标准库中可能没有直接的支持. 其实你有两个选择: 完全由自己来构建一些东西.这一般很痛苦,而且很费时间. 去"社区"看看是否已经有人遇到了同样的问题(这种情况

了解WEB页面工具语言XML(六)展望

web|xml|页面  六.XML展望 任何一项新技术的产生都是有其需求背景的,XML的诞生是在HTML遇到不可克服的困难之后.近年来HTML在许多复杂的Web应用中遇到了问题,要彻底解决这些问题,必须用功能强大的XML来替代HTML作为Web页面的书写工具.XML有利于信息的表达和结构化组织,从而使数据搜索更有效:XML可以使用URL别名使 Web的维护更方便,也使Web的应用更稳定:XML可以使用数字签名使Web的应用更广阔拓展到安全保密领域.可以认为未来的Web书写工具必定是XML.而XM

xml-C# 如何将纯文本TXT转换成XML格式

问题描述 C# 如何将纯文本TXT转换成XML格式 想做一个小的demo 学习中遇到一点小问题 请大神指导 通过一个简单的转换 不求转换精准 解决方案 public partial class FrmTxtXml : Form { String txtContent = String.Empty; // public FrmTxtXml() { InitializeComponent(); } //打开txt文件 private void toolStripOpen_Click(object s

jaxb将jabaBean 转换成 xml

问题描述 jaxb将jabaBean 转换成 xml 怎么转换成这种格式的 解决方案 这是问题吗/? 建议你看看XSD语法,XML定义文件,根据schema文件,生成Java对象,然后自动生成这样的XML 如何创建XSD文件,你可以使用oxygenXML这个工具,网上下载吧https://www.oxygenxml.com/download.html 解决方案二: JAXB实现Object与XML转换

map对象转换成xml

1. @XmlAccessorOrder.UNDEFINEDXmlAccessorOrder.UNDEFINED无序   @XmlAccessorOrder.ALPHABETICAL是指按属性的字母顺序排序. 2. @XmlType的propOrder 属性时,必须列出JavaBean对象中的所有属性,否则会报错   @XmlType(propOrder = { "id", "name", "age","book"})指定输出

急着用!利用.net框架 将jpeg转换成xml

问题描述 同题,请问大侠,这如何实现啊!跪求啊!急着用! 解决方案 解决方案二:急着用!利用.net框架将jpeg转换成xml解决方案三:转成base64格式Stringx=Convert.ToBase64String(File.ReadAllBytes("c:\xx.jpg"));然后存储xml如"<data>"+x+"</data>"

将aspx页面转换成html页面的例子.

问题描述 将aspx页面转换成html页面的例子.<!--main.aspx--><%@pagelanguage="C#"%><%@importnamespace=System.IO%><scriptrunat="server">protectedoverridevoidOnInit(EventArgse){ intid; try { id=int.Parse(Request.QueryString["id&

PHP实现数组array转换成xml的方法_php技巧

本文实例讲述了PHP实现数组array转换成xml的方法.分享给大家供大家参考,具体如下: <?php $elementLevel = 0 ; function array_Xml($array, $keys = '') { global $elementLevel; if(!is_array($array)) { if($keys == ''){ return $array; }else{ return "\n<$keys>" . $array . "&l