以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  在xsl文件中如何动态引用另一个xml文件  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=45541)


--  作者:cooltfn
--  发布时间:4/16/2007 6:45:00 PM

--  在xsl文件中如何动态引用另一个xml文件
工作中一项需求如下: 我动态生成了一个XML,然后用写好的一个xsl文件解析成html, 但后来需要不断地往xml文件中添加内容,所以xsl文件也需改变, 我希望能在之前写好的xsl文件中添加一个判断,针对不同的xml内容来动态引用另一个xsl文件来解析,请教各位达人,解救我于无尽的加班之中, thank u~~
--  作者:Qr
--  发布时间:4/17/2007 8:39:00 AM

--  
不太现实,虽然可以使通过写通用模板来实现XML的解析,但页面输出就很难格式化了。即便你动态引用另一个xsl文件,你仍需要修改主XSL来实现,所以XML结构发生大的变化时,XSL也就得跟着变化。

非要按你的要求给个思路也行:在XSL开始处定义一大堆和XML 标记有关的变量,加上其对应的模板名(也定义为变量),之后便可在XSL中判断XML标记,根据判断结果,调用不同模板,用于格式化相应的内容,以方便用户浏览。这只是一个简法,也许还有更好的方法。

外部XSL的调用:

<xsl:import> 元素
--------------------------------------------------------------------------------
定义和用法
<xsl:import>元素是一个高级(原文是top-level)的元素用来把一个样式表的内容导入到另外
一个。
说明:一个被导入的样式表比导入它的样式表的优先级要低。
说明:这个元素必须在<xsl:stylesheet> 或<xsl:transform>元素中作为第一个子节点出现。
说明:在Netscape 6 中不支持import 优先级规则,所以这个元素在Netscape 6 中与
<xsl:include>是一样的。
--------------------------------------------------------------------------------
语法
<xsl:import href="URI"/>



--  作者:cooltfn
--  发布时间:4/17/2007 10:30:00 AM

--  
非常感谢Qr的提示, 我的情况是: 只有等xml文件生成之后才知道调用什么xsl文件,而且xsl文件是另外的人提供的,所以生成完xml文件之后才能再往xsl文件中写入<xsl:import >之类的标签,这样的话很麻烦,且不容易控制。 需求要求我要把所有xml的内容在一个HTML文件中显示,以便用户打印出来,所以另外一种想法就是,之前写好的代码不变,后面添加的xml文件根据相对应的xsl文件生成HTML文件,然后再把这个HTML文件合并到之前的HTML文件中去。这又涉及到I/O流的操作,而且又要在以前生成的HTML文件中寻找到合适的插入位置。请问,还有不有更好的解决方案?
--  作者:Qr
--  发布时间:4/17/2007 5:43:00 PM

--  
XML不知结构如何,XSL不能动,你怎么可能调用外部XSL去解析XML。即便可以通过其它方式进行处理,那连XML都不知道结构如何,怎么处理XML,通用的XSL都不好写噢。

如果是这样,建议LZ写个解析器吧,呵呵。如果有这样的工程,给偶多少钱都不接,落个清闲。


--  作者:zhuxianjianqi
--  发布时间:5/3/2010 11:46:00 AM

--  
用xalan扩展 xsl功能,这样麻烦点,也不失一个解决方案
--  作者:jj_long
--  发布时间:12/10/2010 11:38:00 AM

--  
首先, 这是一个业务问题而不是技术问题。先需要把问题弄清楚:
你说需要不断地添加内容,那么需要决定下来到底需要添加什么内容(元素),相应的只有这个确定了,你才可以确定怎么写XSLT去处理你的XML。

从技术角度讲,在XSLT中,没有办法去动态import一个XSLT文件。


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
5,685.547ms