document的使用?

ttyp 2005-01-29 10:12:49
想做一个两个XML的关联查询,可是当document指定的xml文件不存在的时候会报错,有没有什么办法在xsl里判断此xml文件是否存在,或者加错误陷阱跳过,这个有点像数据库里的外连接
...全文
444 35 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
ssm1226 2005-03-04
  • 打赏
  • 举报
回复
偶还要请教楼上问题呢:)~
ttyp 2005-03-04
  • 打赏
  • 举报
回复
ie的实现者是让它报错:(
  • 打赏
  • 举报
回复
关键是对xsl不熟悉啊,楼上给讲讲啦*^_^*

期待的目光
  • 打赏
  • 举报
回复
XSLT程序员参考手册(第二版)一书的363页是讲document的其中364页最后一段这什么写的:

函数document()的输入参数URI必须能够唯一(原书这里有错别字)标识一个XML文档.如果该URI不合

法,或者它不标识任何资源,或者标识的资源不是一个XML文档,XSLT规范就让实现者来决定应如何处

理:可以报错,也可以返回一空节点集.
ssm1226 2005-03-04
  • 打赏
  • 举报
回复
能用xsl解决的,最好不要用脚本:)~``
ssm1226 2005-03-04
  • 打赏
  • 举报
回复
:)~~
ttyp 2005-03-04
  • 打赏
  • 举报
回复
博客园我写的很多都是js
.net都是些技巧,没啥写的
  • 打赏
  • 举报
回复
如果我有电子的我就把原因帖了,我回家再写吧,博客园的blog我一次都没写过,关键是我不用.net,实在懒得写看了.net后的心得
ttyp 2005-03-04
  • 打赏
  • 举报
回复
to ssm1226(雨中人) :在你这块田里你老大:)
ttyp 2005-03-04
  • 打赏
  • 举报
回复
to liuxiaoyi666(兔子):我都是看ms xml4.0的sdk的,比较全,就是他的例子都太简单
ssm1226 2005-03-04
  • 打赏
  • 举报
回复
to ttyp(@http://www.cnblogs.com/ttyp/) :老兄也是强人呀,呵呵:)
ssm1226 2005-03-04
  • 打赏
  • 举报
回复
有本xslt高级编程,不是电子的:(
  • 打赏
  • 举报
回复
楼上你有没有XSLT程序员参考手册 wrox的,机械工业出版社的,我看到原因了
ttyp 2005-03-04
  • 打赏
  • 举报
回复
都这么谦虚啊-_-!
  • 打赏
  • 举报
回复
<xsl:variable name="t" select="document(concat(@id,'.xml'))//content"/> ------------------------>这里有问题,当concat(@id,'.xml')表示的xml不存在时会报错
<xsl:stylesheet version="1.1"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:js="javascript:code">
<xsl:script language="javascript" implements-prefix="js">
</xsl:script>

这个是方法一的解决

<xsl:variable name="t" select="document(concat(@id,'.xml'))//content"/> ------------------------>这里有问题,当concat(@id,'.xml')表示的xml不存在时会报错

方法二 插入例如<div>的html元素

在前面跟我一样用script脚本
用transform去解析xml文件并返回html文本用innerHTML插入

方法三 用xmlhttp插入

呵呵,反正方法多多了,随便你选择了

效率是第一种最高,不过不大好写,我基本上不用这种方法,不得以而为之的

ttyp 2005-03-03
  • 打赏
  • 举报
回复
这个是我的xsl

<?xml version="1.0" encoding="GB2312" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="a" select="1"/>

<xsl:template match="/">
<html>
<head>
</head>
<body>
<TABLE border="1">
<caption>
<xsl:value-of select="@name"/>
</caption>
<xsl:for-each select=".//item">
<xsl:variable name="t" select="document(concat(@id,'.xml'))//content"/> ------------------------>这里有问题,当concat(@id,'.xml')表示的xml不存在时会报错


<TR>
<td><xsl:number value="position()" format="1. "/></td>
<xsl:if test="position() mod 2 = 0">
<xsl:attribute name="bgcolor">#f4f4f4</xsl:attribute>
</xsl:if>
<TD><xsl:value-of select="$t"/></TD>
<TD><xsl:value-of select="@name"/></TD>
</TR>

</xsl:for-each>
</TABLE>


<xsl:element name="input">
<xsl:attribute name="type">button</xsl:attribute>
<xsl:attribute name="value">close</xsl:attribute>
<xsl:attribute name="onclick">javascript:window.opener=null;window.close();</xsl:attribute>
</xsl:element>
</body>
</html>
</xsl:template>

</xsl:stylesheet>
ttyp 2005-03-03
  • 打赏
  • 举报
回复
呵呵,再次感谢,都打了这么多字,有思路就好了。我想的是第一种加一个判断文件是否存在的函数,用fso有权限问题,因此最好是xmlhttp,然后再调用document前调用这个函数,我做的是联合查询中搜索关键字,数据稍微多点就回慢的,因此需要效率,估计xmlhttp效率也好不到哪去,要是document内部不报错就好了
  • 打赏
  • 举报
回复
后来我寻找到了三种解决办法,其中第一种是无意中看到了你刚才给的网址,然后查书的,后来有想到了

第三种办法,然后写了个xmlhttp的类,不过这个在本地的机器是实在是不好,有点儿大材小用了,最后

是想到了xmldom的方法,呵呵*^_^*

然后我总结了一下,根据原理出发想了想应该是第一种方法的效率最高,因为,我发现xslt是这么个执

行的方法,先检查语法规则,之所以我写成了<script src="xx.vbs"></script>那个是有原因的

因为如果不这么写的话&符号是不符合xml标准的,所以我求求你(啊不对了,被听的歌带跑了,脸红一

下),根据这个原理,再分析如果初始化的话就是先解析了xslt的script,这样一上来就执行了,而且是

比较全的,不会出现了脚本错误这种现象(我始终认为客户端js是不太稳定的),然后才是你加载

的xmldom的对象操作,而且多创建一个对象的话,显然效率是差一些的,所以综上所述我得出了第一种

效率最高,在二,三种的效率来看,我觉得是第二种效率高一些

打了一大堆废话,呵呵,其实都是逻辑推论的,不一定符合真实情况,这个要做测试的*^_^*
  • 打赏
  • 举报
回复
哈哈你也找到这篇文章了,我是看完了以后又看了xslt程序员参考书

照着书写的*^_^*有个扩展script的方法,你可以看wrox的那本书里写的,估计是w3c的,ms不是很符合,猜

测中,因为书上是说"本书的例子与MSXML"的不完全相同

所以后来我就没用,因为对我来说效率不是第一位要考虑的,我做的东西是在本机上运行的,能装xp的机

器运行都不费力,所以我用了xmldom,我当时跟你有一样的困惑的
ttyp 2005-03-03
  • 打赏
  • 举报
回复
找了篇文章http://www-900.ibm.com/developerWorks/cn/xml/tips/x-tipxsltjs/index.shtml,在xsl中调用js,呵呵,问题不大了
加载更多回复(15)

8,909

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧