答疑:按照关键索引,合并XML文档 

2008/3/26 16:31:27


阅读全文(4692) | 回复(8) | 编辑 | 精华

问题:假设现有两个xml文件分别为:文件1:<stu>     <sno>001</sno>     <sname>张三</sname>     <ssex>男</ssex>     <sadd>某地</sadd>     <sid>123456789012345</sid></stu><stu>     <sno>002</sno>     <sname>李四</sname>     <ssex>男</ssex>     <sadd>某地</sadd>     <sid>987654321012345</sid></stu>文件2:<info>     <sid>123456789012345</sid>     <sexamid>2008002</sexamid></info><info>     <sid>987654321012345</sid>     <sexamid>2008001</sexamid></info> 需求:现在需要以文档中的<sid>节数据为索引,将两个文件合并为一个新的XML文件。要求:将第二个文件的<sexamid>节点添加到第一个文件的<sid>的对应节点。如 <stu>     <sno>001</sno>     <sname>张三</sname>     <ssex>男</ssex>     <sadd>某地</sadd>     <sid>123456789012345</sid>     <sexamid>2008002</sexamid></stu><stu>     <sno>002</sno>     <sname>李四</sname>     <ssex>男</ssex>     <sadd>某地</sadd>     <sid>987654321012345</sid>     <sexamid>2008001</sexamid></stu> 本人答疑: <?xml version="1.0" encoding="gb2312" ?><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:variable name="temp" select="document('文件2')//info"/><xsl:template match="/"><root>     <xsl:apply-templates select="//stu" /></root></xsl:template> <xsl:template match="stu">     <xsl:variable name="id" select="sid"/>     <stu>          <xsl:copy-of select="*"/>          <xsl:copy-of select="$temp[sid=$id]/sexamid"/>     </stu></xsl:template> </xsl:stylesheet> 运行结果:如问题需求! 500)this.width=500'> 答疑帖子:http://bbs.xml.org.cn/dispbbs.asp?boardID=8&ID=60435

Qr

Posted by Qr on 2008/3/26 16:31:27

回复:[答疑]按照关键索引,合并XML文档

2008/4/22 14:50:25


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除

呵呵!我是最近才学xml和xslt的!所以不是很清楚!

belinda_pjm

Posted by belinda_pjm on 2008/4/22 14:50:25

回复:[答疑]按照关键索引,合并XML文档

2008/4/22 11:16:06

呵呵!已经可以了!你去看论坛里面的咯!http://bbs.xml.org.cn/dispbbs.asp?boardID=8&ID=61644 你自己去看看咯! 以下为blog主人的回复: 没有实质区别。我建议你去好好复习一下xsl:apply-templates,xsl:call-template,xsl:for-each的相关知识。

belinda_pjm

Posted by belinda_pjm on 2008/4/22 11:16:06

回复:[答疑]按照关键索引,合并XML文档

2008/4/21 17:31:18

如果你上面的    <xsl:apply-templates select ="//stu"/> 不改成    <xsl:call-template name ="stu"/> 那你的模版有什么意义呢?还不如没有呢? 以下为blog主人的回复:  <xsl:template match="stu">不是xsl:apply-templates要去匹配的模板吗?模板非要用命名模板吗?  

belinda_pjm

Posted by belinda_pjm on 2008/4/21 17:31:18

回复:[答疑]按照关键索引,合并XML文档

2008/4/21 16:52:25

我是直接用你上面的代码不行!我自己修改后运行的结果就像我上面所说的一样! 以下为blog主人的回复: 把你的代码贴出来我看看,还有运行环境。  

belinda_pjm

Posted by belinda_pjm on 2008/4/21 16:52:25

回复:[答疑]按照关键索引,合并XML文档

2008/4/21 11:57:33

我照你的方法去做!他能把节点拷贝过来!但是不是你说的那个结构!他是直接在后面把<sexamid>2008002</sexamid><sexamid>2008001</sexamid>添加在后面!还有 <xsl:apply-templates select="//stu" /> 应该改换成:<xsl:call-template name ="stu"/> 以下为blog主人的回复: 你的意思是说直接应用我的代码得不到图中的结果?还是你将代码修改后得不到图中的结果? 还有,xsl:apply-templates 是将模板运用到当前元素或子节点,而xsl:call-template 是调用一个命名模板,二者有原则上的区别,我的代码中没有使用命名模板,为什么非得用xsl:call-template来调用呢。而且这个需求也没必要使用命名模板吧!况且,前面的代码改用xsl:call-template来调用也得不到如上图的结果吧?怀疑是你在修改代码的问题!  

彭建美(游客)

Posted by 彭建美(游客) on 2008/4/21 11:57:33

回复:[答疑]按照关键索引,合并XML文档

2008/4/16 23:49:26

为啥我用Altova XMLSpy运行此代码  看不到Qr给出的图片中显示的那种效果呢   谢谢了 以下为blog主人的回复: 我没装XMLSpy,纯粹通过其它方式在IE中查看罢了。XMLSpy看到的应该是类似图中的XML文档风格的转换结果。  

freshMan(游客)

Posted by freshMan(游客) on 2008/4/16 23:49:26

回复:[答疑]按照关键索引,合并XML文档

2008/3/31 13:35:41

以下引用青青子瑾在2008-3-26 19:24:38的评论: 以下为blog主人的回复:  为什么  看不明白啊。

烟雨朦胧

Posted by 烟雨朦胧 on 2008/3/31 13:35:41

回复:[答疑]按照关键索引,合并XML文档

2008/3/26 19:24:38

以下为blog主人的回复:  为什么  

烟雨朦胧

Posted by 烟雨朦胧 on 2008/3/26 19:24:38

» 1 »

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

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