有关XML解析器的问题(300分)

  • 主题发起人 主题发起人 barton
  • 开始时间 开始时间
B

barton

Unregistered / Unconfirmed
GUEST, unregistred user!
我决计在我的系统中全面使用XML文档格式。我发现使用XML有四大好处:
1.可以传递数据,结合TCP/IP,在不同的主机间、进程间,方便至极。
2.与DOM转换,可以在主程与DLL间传递DOM节点对象,也是非常方便;
3.通过DOM节点来建立和修改企业逻辑中的对象,不需要传递一大堆参数,简直棒极了!
4.数据模块与应用模块分离,通过XML标准来对接,你知道会有什么效果吗?
呵呵,三层就出来了。
可是我遇到了重大问题:是否有可用的解析器?
a.我用过TurboPower的XML Partner professional,使用起来非常方便,但不支持中文
解析;
b.我也用过XDOM 2.3.15,源程序代码超过80000行,仍然不能解析中文;
c.Micosoft XML 3解析器显然支持中文,但如何在Delphi中使用?我注册了MSXML3.DLL,
但仍然在Import ActiveX中找不到。
d:于是我使用Delphi6中的XMLDocument控件,可是竞然不支持SelectNode方法,而MSXML是
一定支持的,再说,现在D6敢用吗?
我知道可以修改来实现,可是,我不能保证我修改后的代码符合XML1.0标准。
此外,我在传递二进制数据时使用一个叫“流堆”的东西,在XML文档中通过某个元素注明
流数据的ID,接收方从“流堆”中取这个流就行了。
可是这必须依赖于建立第二条TCP连接来使发送方与接收方的流数据同步。
有更好的方法吗?CDATASection似乎不行.
 
比来比去,还是 MSXML 最好,SelectNodes 需要 XPath 支持,也只有 MSXML 能做了,随着
IE6,WinXP 的发布,这个东西将来就象 ODBC/ADO,直接就进操作系统了。[:)]
您应该 Import Type Library 吧,请试试。
CDATA 中应该可以放编过码的东西的,例如图像。如果您自制 TCP Server 的话,也可以
在传送 XML 流结束后,不关闭端口,继续传二进制数据流。

 
兄弟:我使用的是 Micosoft XML 4 !
不过用法应该和 Micosoft XML 3 一样的。
1. 安装控件(不详细说了)
2. 在菜单上选择 project->import type library
3 后面跟着向导走把!
安装完后在 ACTIVEX页下可以看到很多东东,自己研究是干什么用的把!
在程序中使用:
uses MSXML2_TLB
var
xmlDoc: IXMLDOMDocument2;
再后边的事情我想老兄你应该知道了把!
 
barton,我的想法和你比较相似
但两位提供的方式不是很方便呀
有没有更好的
java中又有什么好的解析器吗?
 
各位回答的都很好,还特别感谢yysun的回答。我尽快试试。
如果MSXML3能用当然我也同意,只是我想知道如何将MSXML封闭到自己的安装器中?
反正在IS6.3中我没有找到MSXML对象。让客户安装自行安装MSXML不太好吧?
 
java中的解析器很多,我接触过的有sun和ibm提供的,都很好用。
在它们的网站上都有下载的。
 
CDATA直接传送流我得试试。不过我是异步的,如果与XML传送使用同一个通道我担心我的系统
难以区别两种文档。
MSXML直接支持XPath吗?
 
我试过了,Import type library后,只有DomDocument可用,而这个控件无法读入XML文档。
[:(]
 
你将MSXML的那个安装包拷在一起,在安装的时候运行就可以了。
 
难道安装过程不能后台完成?
 
MSXML 有很多种安装方法:
有 .msm 的形式(Windows Install 文件)
http://msdn.microsoft.com/downloads/sample.asp?url=/msdn-files/027/001/592/msdncompositedoc.xml
有 .cab 的形式(通过网页安装,就象我们论坛)
http://msdn.microsoft.com/downloads/sample.asp?url=/MSDN-FILES/027/001/650/msdncompositedoc.xml
有 .exe 的形式
http://msdn.microsoft.com/downloads/sample.asp?url=/msdn-files/027/001/591/msdncompositedoc.xml
还有,配合 xmlinst.exe 只要 regsvr32 msxml3.dll 就可以了。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=654136
 
D6的XMLDocument在载入文档后无法用流方式读入CDATA数据。
导入的MSXML的接口也无法使用,似乎只能在浏览器中用。
 
XML partner 和XDOM都支持以流方式访问节点数据的。
 
D6 的 XMLDocument 我没有试验过。
强烈推荐 MSXML,速度快,中文兼容。它其实不用导入也能用,我从来就不导入的。
看这里的例子:http://www.delphibbs.com/delphibbs/dispq.asp?lid=495235
找 ID=495584 的回贴。
 
看来我没得选择了:
1.解析器使用MSXML,完全按yysun的想法;
2.二进制数据传递还是使用我的流堆吧。
 
按yysun的意见处理了,可是OleVariant不能用指针引用,无奈只好重新建一套DOM的映象。
这样的结果是:我其实只用了MSXML的解析功能,XPath函数只能通过自己的类过程实现。
好在我的DOM映象中有一套快速的检索机制,实现起来也不困难。
我很困惑:
1.Delphi为什么没有做一套基于MSXML的适应Delphi环境的XML解析器或DOM控件?比如,
MSXML无法从流中load文档。当XML文档大于500K时,只能通过临时文件来作为中间环节,
难道还能用widestring格式不成?而从数据库中读出blob字段时,很合适从流中读文档
的。
2.无论是IXMLDOMDocument还是IXMLDOMNode,都是通过waidestring类型的数据访问类属性,
难道这种属性在主程和DLL间传递安全吗?我希望将IXMLDOMNode绑到每个我自定义的对象
中,可是不可能。因为OleVariant不支持指针引用。
 
》barton
为什么不使用XHTML的格式呢?与现在的IE4也兼容,速度也很快,象HTML一样。
 
学习学习
 
XHTML是标准吗?i 不过如果方便不是标准也行.
 
>>barton, 时间:2001-11-9 14:03:00, ID:719003
>>XHTML是标准吗?i 不过如果方便不是标准也行.
XHTML只是比XML多一点语法而已,是为了在IE上显示的。
(以前IE的版本还不支持xml)。很方便。
 
后退
顶部