如何以最有效的方式读取远程XML文件

本文关键字:读取 XML 文件 方式 有效 | 更新日期: 2023-09-27 17:48:52

我正在开发一个小应用程序,用于检索位于远程服务器(http://example.com/myfile.xml)上的XML文件这个文件相对较大,它包含了一个地理位置的大列表,以及我需要在应用程序中使用的其他信息。所以我远程读取了这个文件一次,并将其插入到一个小的SqlCE文件(database.sdf)中

因此,如果我需要访问地理位置#1,我只需要在这个DATABASE中生成一个SELECT语句,而不是每次都加载整个XML文件。

但我想知道是否可以在不使用.sdf文件的情况下做到这一点?

最有效(最快)的方法是什么?

在本地保存一次大XML文件,如果每次启动应用程序时都将其加载到数据集中,则进行加载?这将使应用程序每次加载都有点长

在本地保存一次大XML文件,然后逐个读取节点以查找地理位置#1?

或者可以直接从远程XML(http://example.com/myfile.xml)中检索地理位置#1而不读取整个文件吗?

如何以最有效的方式读取远程XML文件

加载大XML文件,将其转换为适当的不同数据结构,并以高效的格式保存到文件中。(XML的效率确实不是很高。)

我相信Marc Gravell的Protocol Buffers实现是基于Compact Framework。。。

(没有一个protobuf实现被认为已经准备好生产了,但有几个已经接近了。我们需要测试人员!)

Re protobuf net,目前还没有单独的CF版本下载,但CF 2.0和CF 3.5的源代码中都有csproj。

澄清你的问题;实际上protobuf-net甚至没有使用.proto文件(目前);.proto文件只是描述数据是什么——protobuf-net只是查看您的类并从中推断出架构(类似于XmlSerializer/DataContractSerializer等的工作方式)。因此,不是.proto,而是看起来像数据的类。

然而,在您开始创建看起来像您的数据的类之前,我想知道您是否不能简单地使用GZIP或[PK]ZIP来压缩数据,并将其传输;照原样";。XML通常能很好地压缩。当然,为CF找到GZIP(etc)实现就成了问题。

当然,如果你在这里使用protobuf net,如果你遇到问题,我会很高兴地建议etc。。。

另一种选择是让CF应用程序调用本地拥有数据的web服务。。。

为什么要为此将整个文件拉到CE设备?这是一种带宽浪费,而且无论存储格式如何,在嵌入式处理器上进行查找肯定会比在服务器上慢。您应该有一个服务(Web、WCF或其他任何服务),允许您向它询问您想要的单个地理位置。