XSL实现多文档合并的示例(XML)
2008/4/3 13:55:09
阅读全文(8687) | 回复(6) | 编辑 | 精华
在中国XML论坛上,有网友在问XSL实现多文档合并输出的问题,恰好这几天有心情有时间,就在这里写个示例,供大家参考和讨论吧。 本文代码为自行构思自行抄写,如有雷同,真是太不可思议了500)this.width=500'>Author:Qr,http://Qr.blogger.org.cn/Date:2008-04-03 filelist.xml: <?xml version="1.0" encoding="gb2312" ?><!--Author:Qr,http://Qr.blogger.org.cn/--><!--Date:2008-04-03--><?xml:stylesheet type="text/xsl" href="filelist.xsl"?><root> <file>file_1.xml</file> <file>file_2.xml</file></root> filelist.xsl: <?xml version="1.0" encoding="gb2312"?><!--Author:Qr,http://Qr.blogger.org.cn/--><!--Date:2008-04-03--><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="xml" version="1.0" encoding="gb2312" indent="yes" /> <xsl:template match="/"><html> <body> <table border="1"> <tr><th>文章</th><th>出处</th></tr> <xsl:apply-templates select="//file" /> </table> </body></html></xsl:template> <xsl:template match="file"> <xsl:apply-templates select="document(.)//item" /></xsl:template> <xsl:template match="item"> <tr> <td><a href="{docurl}" target="_blank"><xsl:value-of select="title" /></a></td> <td><a href="{blogurl}" target="_blank"><xsl:value-of select="blog" /></a></td> </tr></xsl:template> </xsl:stylesheet> file_1.xml: <?xml version="1.0" encoding="gb2312" ?><!--Author:Qr,http://Qr.blogger.org.cn/--><!--Date:2008-04-03--><root> <item> <title>管理层喜跌怕涨? 央视:我们到底需要一个怎样的股市</title> <docurl>http://blogger.org.cn/blog/more.asp?name=Qr&id=33437</docurl> <blog>『知』治通鉴</blog> <blogurl>http://Qr.blogger.org.cn/</blogurl> </item> <item> <title>[答疑]按照关键索引,合并XML文档</title> <docurl>http://blogger.org.cn/blog/more.asp?name=Qr&id=32938</docurl> <blog>『知』治通鉴</blog> <blogurl>http://Qr.blogger.org.cn/</blogurl> </item></root> file_2.xml: <?xml version="1.0" encoding="gb2312" ?><!--Author:Qr,http://Qr.blogger.org.cn/--><!--Date:2008-04-03--><root> <item> <title>通过XSLT方式以特定分隔符处理XML节点数据(续)</title> <docurl>http://blogger.org.cn/blog/more.asp?name=Qr&id=32660</docurl> <blog>『知』治通鉴</blog> <blogurl>http://Qr.blogger.org.cn/</blogurl> </item> <item> <title>通过XSLT方式以特定分隔符处理XML节点数据</title> <docurl>http://blogger.org.cn/blog/more.asp?name=Qr&id=31223</docurl> <blog>『知』治通鉴</blog> <blogurl>http://Qr.blogger.org.cn/</blogurl> </item></root> 说明:有多少个XML文档,就在filelist.xml中加多少个file节点吧,只要你的计算机内存足够大,加多少个无所谓500)this.width=500'> 文章只用最简单的代码进行举例,如果对你有用,自己看着改吧500)this.width=500'> 文章采用最简单的XSL代码和最基本的XSL方法,想必熟悉XSL的朋友应该读懂吧,加之本人不喜欢写太多备注,要是还不理解,就回复等答复吧500)this.width=500'>
Posted by Qr on 2008/4/3 13:55:09
回复:XSL实现多文档合并的示例(XML)
2008/4/13 21:19:34
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
又有新的问题请教了,先谢了 两种情况 1、<xml id="xmldata"><root></root></xml> 输出<div class="none">未发现</div> 2、<xml id="xmldata"> <root> <task>...</task> </root> </xml> 输出<xsl:template match="task"> 如何根据<root></root>内容是否为空输出不同内容 以下为blog主人的回复: 描述不清,无从下手!
ahura(游客)
Posted by ahura(游客) on 2008/4/13 21:19:34
回复:XSL实现多文档合并的示例(XML)
2008/4/4 9:17:51
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
我的思路也在不断调整 例如取得下面四个变量 <xsl:variable name="value1" select="count(//item[@severity='high'])"/> <xsl:variable name="value2" select="count(//item[@severity='medium'])"/> <xsl:variable name="value3" select="count(//item[@severity='low'])"/> <xsl:variable name="value4" select="count(//item[@severity='info'])"/> 如何取得四个变量的最大值 以下为blog主人的回复: XSLT1.0没有MAX()这类方法,所以,只能通过模板递归来实现值的比较。
ahura(游客)
Posted by ahura(游客) on 2008/4/4 9:17:51
回复:XSL实现多文档合并的示例(XML)
2008/4/3 23:13:13
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
你好,照着你的做法可以调用外部的xml了 我把xml改成了这样: test.xml: <item caption="aaaa>2000-0986.xml</item><item caption="bbbb>2001-0499.xml</item><item caption="cccc>2001-1372.xml</item> 2000-0986.xml: <entry score="5.0" severity="Medium">...</entry> 2001-0499.xml <entry score="6.6" severity="High">...</entry> 2001-1372.xml <entry score="8.8" severity="Low">...</entry> 还能得到score的合计吗 还能得到severity的计数吗,先谢了! 以下为blog主人的回复: 不能! 我们来看这一行代码,<xsl:apply-templates select="document(.)//item" />,实际上是<xsl:apply-templates select="document(file)//item" />,就是说,这个模板每次去匹配一个file节点对应的xml文档,而不是一次性地引用所有file节点对应的xml文档,所以,在<xsl:template match="item">中是不能跨文档进行数据的处理的。回到你的问题,将不同文档的score和severity来合并计算,用我前面的代码是行不通。 但也不是绝对不行,使用命名模板,然后通过<xsl:call-template>调用以实现递归,应该可以达到你的要求。模板递归,我这里有不少示例,你可以翻阅一下
ahura(游客)
Posted by ahura(游客) on 2008/4/3 23:13:13
回复:XSL实现多文档合并的示例(XML)
2008/4/3 20:01:07
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
以下引用青青子瑾在2008-4-3 18:35:03的评论: 这几天有些郁闷,区教育网屏蔽了新浪搜狐,还有股市,以及百度,还有QQ游戏,把我憋死了。不知道什么时候能解除屏蔽。唉,有病的领导啊。这几天忙,等空闲下来我要写写感受了。烦恼啊。使用代理吧,想上啥哪就上哪,国内国外的网站都可以。
Posted by Qr on 2008/4/3 20:01:07
回复:XSL实现多文档合并的示例(XML)
2008/4/3 18:35:03
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
这几天有些郁闷,区教育网屏蔽了新浪搜狐,还有股市,以及百度,还有QQ游戏,把我憋死了。不知道什么时候能解除屏蔽。唉,有病的领导啊。这几天忙,等空闲下来我要写写感受了。烦恼啊。
Posted by 烟雨朦胧 on 2008/4/3 18:35:03
回复:XSL实现多文档合并的示例(XML)
2008/4/3 18:29:05
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
再发一个。谁叫我不懂呢。 以下为blog主人的回复: 想写些大家都看得懂的文字,可是自己又没那文笔只能胡乱写些晦涩的代码来凑数
Posted by 烟雨朦胧 on 2008/4/3 18:29:05
发表评论: |