[讨论]抛砖引玉 js+dom操作xml快,还是xsl解释xml快
时间:2003-02-28
来源:互联网
下面是操作xml的js+dom
var t1=new Date();
var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.load("xml.xml");
var nodes=xmlDoc.documentElement.childNodes;
var len=nodes.length,a=[];
for(var i=0;i<len;i++)a[i]=nodes.item(i).getAttribute("text");
a=a.join("");
document.write(a.length);
alert(new Date()-t1);
[ 本贴由 flashsoft 于 2003-2-28 17:48 最后编辑 ]
作者: flashsoft 发布时间: 2003-02-28
<?xml version="1.0" encoding="gb2312"?>
<?xml-stylesheet type="text/xsl" href="xml.xsl"?>
<catalog>
<titles text="*" />
<titles text="*" />
<titles text="*" />
<titles text="*" />
<titles text="*" />
<titles text="*" />
<titles text="*" />
<titles text="*" />
<titles text="*" />
<titles text="*" />
<titles text="*" />
<titles text="*" />
<titles text="*" />
<titles text="*" />
<titles text="*" />
<titles text="*" />
<titles text="*" />
<titles text="*" />
</catalog>
里面的数据自己增大
然后测试下
好像速度不快的说
作者: flashsoft 发布时间: 2003-02-28
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<script language="JScript">
var t1=new Date();
var a="<xsl:for-each select="catalog/titles"><xsl:value-of select="@text" /></xsl:for-each>";
document.write(a.length);
alert(new Date()-t1);
</script>
</xsl:template>
</xsl:stylesheet>
作者: flashsoft 发布时间: 2003-02-28
xml.htm
xml.xml
xml.xsl
请大家测试下,并且讨论出一个较快的方法
^_^
作者: flashsoft 发布时间: 2003-02-28
非常想学 xml ,但就是没找到怎么入门,有兴趣的和我一起学,我相信在无忧我一定能学会这玩意
作者: 风云突变 发布时间: 2003-02-28
作者: flashsoft 发布时间: 2003-02-28
xml.xml:基本在0-10之间,多次为0。
测试环境:win2kp+IE5.5
[ 本贴由 cawangjun 于 2003-2-28 17:51 最后编辑 ]
作者: cawangjun 发布时间: 2003-02-28
你最好把数据增加到万条以上测试
作者: flashsoft 发布时间: 2003-02-28
xml.htm:慢! 太慢! 66636多!
xml.xml:的确快! 基本保持不变,10-20。
作者: cawangjun 发布时间: 2003-02-28
==========================
无法显示 XML 页。
使用 XSL 样式表无法查看 XML 输入。请更正错误然后单击 刷新按钮,或以后重试。
--------------------------------------------------------------------------------
系统未找到指定的对象。处理资源 'file://E:\xml.xsl' 时出错。
作者: 剑啸狂沙 发布时间: 2003-03-01
作者: 剑啸狂沙 发布时间: 2003-03-01
html:62620
xml:0
作者: 剑啸狂沙 发布时间: 2003-03-01
改为var t1=new Date();
var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.load("xml.xml");
var node=xmlDoc.documentElement.firstChild;
var a=[],i=-1;
do a[++i]=node.getAttribute("text");
while(node=node.nextSibling);
a=a.join("");
document.write(a.length);
alert(new Date()-t1);
试试
作者: flashsoft 发布时间: 2003-03-03
二者都是不能互换的技术,互相谈快慢不相及!
操作DOM适合在分析数据的场景,XSL转换XML适用于显示数据!
作者: not 发布时间: 2003-03-03
用下面这个
var t1=new Date();
var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.load("xml.xml");
var node=xmlDoc.documentElement.firstChild;
var a=[],i=-1;
do a[++i]=node.getAttribute("text");
while(node=node.nextSibling);
a=a.join("");
document.write(a.length);
alert(new Date()-t1);
比xsl转换xml要来的快,那么不知你是用xsl转换还是用dom呢~
^_^
作者: flashsoft 发布时间: 2003-03-03
我在常规的开发中,XSLT在业务逻辑层上根本无用!
XPATH和DOM才是常用的!
作者: not 发布时间: 2003-03-03
你说的也是未必的
`^_^
作者: flashsoft 发布时间: 2003-03-03
呵呵,不同场合不同需要,
你说的也是未必的
`^_^
愿闻其详
作者: not 发布时间: 2003-03-03
作者: flashsoft 发布时间: 2003-03-03
作者: not 发布时间: 2003-03-03
比如可能是以树出现,可能是以菜单出现,但是数据是一致的,那么你如果处理这个的时候肯定是做两种方式,但是js+dom就不必分开做
作者: flashsoft 发布时间: 2003-03-03
你描述的问题:
数据是XML文件
操作:显示XML(菜单、树)
在你谈的Web Page范围内,我选择的解决方案是XSL!
flashsoft,你对XML哪方面的技术了解比较好?
互相交流下,我用DOM和XPath比较多。
给个最近在对Exchange Server上做WebDAV编程的例子看下:
作者: not 发布时间: 2003-03-03
/// 获取用户的日历文件夹
/// </summary>
/// <param name="userid">用户名</param>
/// <returns>用户的日历文件夹</returns>
public static Uri GetCalendarFolder(string userid)
{
Uri uri = null;
try
{
// 用户的根目录
Uri root = new Uri("http://" + host + "/exchange/" + userid);
HttpWebRequest req = (HttpWebRequest)(WebRequest.CreateDefault(root));
// 准备查询头部
req.Method = "PROPFIND";
req.ContentType = "text/xml";
req.Credentials = new System.Net.NetworkCredential(user, password);
// 准备查询语句
string query = "<?xml version=\"1.0\" ?>" +
"<D:propfind xmlns:D=\"DAV:\" xmlns:R=\"urn:schemas:httpmail:\">" +
"<D:prop><R:calendar /></D:prop>" +
"</D:propfind>";
req.ContentLength = GetContentLength(query);
// 准备查询体
StreamWriter sw = new StreamWriter(req.GetRequestStream());
sw.Write(query);
sw.Close();
// 获取查询结果
HttpWebResponse response = req.GetResponse() as HttpWebResponse;
string body = System.Web.HttpUtility.HtmlDecode(HttpHelper.GetBody(response));
// 解析查找结果
XmlDocument doc = new XmlDocument();
doc.LoadXml(body);
// 创建名称空间管理
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("b","urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/");
nsmgr.AddNamespace("d","urn:schemas:httpmail:");
nsmgr.AddNamespace("c","xml:");
nsmgr.AddNamespace("f","urn:schemas-microsoft-com:office:office");
nsmgr.AddNamespace("a","DAV:");
XmlNode ncalendar = doc.SelectSingleNode("/a:multistatus/a:response/a:propstat/a:prop/d:calendar", nsmgr);
uri = new Uri(ncalendar.InnerText);
}
catch(WebException e)
{
EventLogHelper.Write("ExchangeHelper", e.Message, EventLogEntryType.Error);
}
return uri;
}
作者: not 发布时间: 2003-03-03
<?xml version="1.0"?>
<a:multistatus xmlns:b="urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/" xmlns:d="urn:schemas:httpmail:" xmlns:c="xml:" xmlns:e="urn:schemas-microsoft-com:office:office" xmlns:a="DAV:">
<a:response>
<a:href>http://hw1/exchange/jiangjs/</a:href>
<a:propstat>
<a:status>HTTP/1.1 200 OK</a:status>
<a:prop>
<d:calendar>http://hw1/exchange/jiangjs/日历</d:calendar>
</a:prop>
</a:propstat>
</a:response>
<a:response>
<a:href>http://hw1/exchange/jiangjs/收件箱/RE: ReminderForExchange代码.EML</a:href>
<a:propstat>
<a:status>HTTP/1.1 404 Resource Not Found</a:status>
<a:prop>
<d:calendar />
</a:prop>
</a:propstat>
</a:response>
<a:response>
<a:href>http://hw1/exchange/jiangjs/收件箱/答复: Bluetooth 成了过时的名词。-2.EML</a:href>
<a:propstat>
<a:status>HTTP/1.1 404 Resource Not Found</a:status>
<a:prop>
<d:calendar />
</a:prop>
</a:propstat>
</a:response>
</a:multistatus>
作者: not 发布时间: 2003-03-03
~O~
作者: flashsoft 发布时间: 2003-03-03
作者: not 发布时间: 2003-03-03
只是生成xml代码而已
实际应用呢
作者: flashsoft 发布时间: 2003-03-03
是从一个XML代码中提取一个有用的信息!
这个就是实际应用!
作者: not 发布时间: 2003-03-03
用js+dom算是在客户端的啦~
作者: flashsoft 发布时间: 2003-03-03
然后在表现出来,然而这个必须是服务器端支持
用js+dom算是在客户端的啦~
GetCalendarFolder返回的是一个Uri不需要显示,表现不一定是Web Page。
我开发的大多数情况都是XML存储的数据!
而不是把XML显示在Web Page里。
我管那个叫业务逻辑层,不一定是服务器端。
它本身就是一个应用程序。
Web Page里的DOM、JS、XSL都只是在IE上面跑跑!
作者: not 发布时间: 2003-03-03
作者: flashsoft 发布时间: 2003-03-03
我正在学哦……
太打击积极性了……
不过这么看来XML也不慢
作者: 沙滩凉鞋 发布时间: 2003-03-04
作者: 52it 发布时间: 2003-03-04
例如: <xsl:output method="html" encoding="UTF-8" indent="yes"/>。
作者: netel 发布时间: 2003-03-26
作者: imafool 发布时间: 2003-04-03
看了看标题和第一篇代码
因为使用的引擎不一样
如果真的需要解析 xml
我个人推荐使用 xslt 而不是 dom
dom 因为考虑兼容性问题会延缓处理进度
另外对楼主的一个建议:
如果你已经安装了 XML4 或者其他版本
请使用 new ActiveXObject("Msxml2.DOMDocument.4.0")
而不是标准的 new ActiveXObject("Microsoft.XMLDOM")
因为 XML4 是共存方式安装的
你这么写代码调用的 XML2.6 (?) 的引擎
因为引擎的不成熟,所耗费更多的时间也是一个因素
至于第 14 楼 卵 的说法,我个人不是很赞同
xslt 的应用不仅仅于显示或转换
如果你用 java 写程序会有这个体会
尝试首先使用特定的 xslt 过滤 xml 代码,再让 sax 来分析过滤以后的 xml 代码
执行时间的压缩和 xml 的扩大肯定不成正比
因为 xslt 解析 xml 想比 sax 和 dom 是最快的
这一点 wrox 的作者和 xml.net 里面都测试过
欢迎大家对我 post 里面的错误指正
作者: snakevil 发布时间: 2003-04-16
原来 卵 是 51js 现在的级别评定
papaya
不过 flashsoft 居然还在坛子里奋斗不息
敬仰滔滔不绝
我曾经的偶像
大家一起努力吧
plus
偶极度不赞同 沙滩凉鞋 的说法
不知道 你试过 sql 和 xml 没有
sql 所占用的资源足够同时运行 3-4 个 xml 元
至于 oracle 和 db2
大家可以自己测试一下
好的 xml 组合在我看来是无敌的
建议尽量使用 xslt 而不是与其他技术兼容的 dom 或者 sax
建议在 xslt 代码里面尽量不要使用到 script 标签
xslt 里面每一个函数的执行周期和 script 里面每一个指令的执行周期大体相同
自己算算看是用 20 个 xslt 函数实现划算还是包含了 10 句的 script 函数实现划算吧
作者: snakevil 发布时间: 2003-04-16
真的要考虑效率的话,考虑的地方实在太多了
作者: flashsoft 发布时间: 2003-05-14
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28