XSL实现多文档合并的示例(XML)

2008/4/3 13:55:09


阅读全文(8688) | 回复(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&amp;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&amp;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&amp;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&amp;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'>

Qr

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游戏,把我憋死了。不知道什么时候能解除屏蔽。唉,有病的领导啊。这几天忙,等空闲下来我要写写感受了。烦恼啊。使用代理吧,想上啥哪就上哪,国内国外的网站都可以。

Qr

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

» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)
站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.078 second(s), page refreshed 144753856 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号