以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 XSL/XSLT/XSL-FO/CSS 』 (http://bbs.xml.org.cn/list.asp?boardid=8) ---- 请教xsl:copy的中英文标识问题[求助] (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=74340) |
-- 作者:hexun831012 -- 发布时间:4/21/2009 8:17:00 PM -- 请将代码贴上来 |
-- 作者:wuqq.xml -- 发布时间:4/21/2009 8:53:00 PM -- XML数据文件: <?xml version="1.0" encoding="UTF-8" ?> <?xml-stylesheet href="show.xsl" type="text/xsl" ?> <个人简历表> <基本信息1> <姓名>张三</姓名> <性别>男</性别> <民族>汉</民族> <出生年月>1989年09月15号</出生年月> </基本信息1> <基本信息2> <联系方式> <学籍信息> <其他综合信息> <获奖情况> <兴趣爱好> <个人特长> </其他综合信息> </个人简历表>
XSL文件: <xsl:template match="/"> <html> <tr> <tr> <tr> <tr> <tr> <tr> <tr> <tr> <td colspan="9" width="400"> </td> <xsl:template match="//姓名|性别|民族|出生年月"> <td> <xsl:template match="//身高|体重|政治面貌|籍贯"> <td> <xsl:template match="//固话|邮件|QQ|手机号"> <td> <td> <xsl:template match="//毕业院校"> <td colspan="3" align="center"> <xsl:template match="//学习经历|获奖情况|兴趣爱好|个人特长"> <xsl:template match="个人空间"> <td colspan="8">
|
-- 作者:wuqq.xml -- 发布时间:4/21/2009 8:55:00 PM -- 问题在: <xsl:template match="//固话|邮件|QQ|手机号"> <td>
|
-- 作者:hexun831012 -- 发布时间:4/25/2009 3:28:00 PM -- 看来你不怎么懂Xpath |
-- 作者:hexun831012 -- 发布时间:4/26/2009 10:54:00 PM -- 你要的实现应该是用<xsl:copy select="node()"/>吧 |
-- 作者:wuqq.xml -- 发布时间:4/27/2009 9:31:00 AM -- 效果相当。。 <xsl:copy select="node()"/>需要用另外一个xmlns:xsl值 现在程序的内容、显示都可以,除了QQ标记(就是中英文的问题) 我试过编码等,都无法解决。。 |
-- 作者:hexun831012 -- 发布时间:4/28/2009 6:37:00 PM -- <xsl:template match="//固话|邮件|QQ|手机号"> <th><!--这里QQ的标记可以匹配到,但无法在浏览器中显示--> <xsl:copy/> </th> <td>
|
-- 作者:wuqq.xml -- 发布时间:4/28/2009 8:35:00 PM -- 可以匹配,我测试过了。 我在<xsl:copy/>后面加上<xsl:copy/>ABC,ABC这个信息可以在结果中显示。因此匹配肯定是没问题的。 <xsl:template match="//固话|邮件|QQ|手机号"> <th><!--这里QQ的标记可以匹配到,但无法在浏览器中显示--> <xsl:copy/>ABC </th> <td>
|
-- 作者:Qr -- 发布时间:4/28/2009 9:55:00 PM -- 以下用法,都是正确的: <xsl:copy/> 或 <xsl:copy-of select="node()"/> 或 <xsl:copy> <xsl:apply-templates/> </xsl:copy> 但是,<xsl:copy/>这种应用必须比较熟悉XSL和XPath的应用,否则哪出错了都不懂。 至于你的代码,<xsl:copy>的用法正确与否,我没有进行测试,不过有一点可以确定: 另,XML论坛各位上各位版主都是比较热情和有责任心的,hexun831012的话也没错,只是他的个性比较直接而已。 |
-- 作者:wuqq.xml -- 发布时间:4/28/2009 10:36:00 PM -- 谢了 |
-- 作者:hexun831012 -- 发布时间:4/28/2009 10:39:00 PM -- 呵呵,打击你了吗,也可以说是激励 第一,你的文档逻辑相当混乱,你的文档换一个结构,转换出来的都差不多,这就出现了逻辑的二义性,第二,大量使用//,不但性能低下,而且一旦出现重名,那必然出现转换错误,你的文档很简单,但在当今的应用系统中,为了系统结构性和维护性,一个转换都是有几十个文档的超空间文档组来完成,所以~~~ 在这里还是有必要解释一下XSL的逻辑,这个是很多新人很难入手的门槛,XSL的逻辑不是赋值,而是匹配,入口是文档,而非根节点,从文档出发,遍历其所有子节点(节点并不是元素,而包括元素,属性,批注,PI,文本...),然后从XSL文档自下而上的寻找第一个匹配的模版进行转换,在模版中可以直接输出内容,也可以在此执行一个匹配,也就是(apply-templates),过程会再一次自下而上的寻找第一个匹配的模版进行转换,以此类推,如果没有匹配的模版,系统会调用默认模版(默认模版是通过顶部隐藏模版实现的),你的文档除了/模版以外,其他模版都极易被误匹配, 我仔细的看了一下,至于你问题,还是错在<xsl:copy/>,这样写才对 <xsl:template match="固话|邮件|QQ|手机号"> <th><!--这里QQ的标记可以匹配到,但无法在浏览器中显示--> <xsl:value-of select="name()"/> </th> <td> <font size="4"> <xsl:value-of select="." /> </font> </td> </xsl:template> <xsl:copy/>输出的是<qq><qq/>而并非是QQ这个标签名,至于中文为什么能输出,这本身是IE的一个BUG,或者说是让步,在标准的解析器里,连中文都显示不出来,比如firefox 我建议你以后这么些这样的模版 <xsl:template match="个人简历表"> <!--...--> <table border="1"> <xsl:apply-templates select="联系方式"/> </table> <!--...--> </xsl:template> <xsl:template match="联系方式"> <!--...--> <tr> <xsl:apply-templates/> </tr> <!--...--> </xsl:template> <xsl:template match="//固话|邮件|QQ|手机号"> <th> <xsl:value-of select="name()"/> </th> <td> <font size="4"> <xsl:value-of select="." /> </font> </td> </xsl:template> 也许我说话打击了你,不好意思,有时候没时间细细看每个帖子,所以大致给个评论,不过还是希望你日后学习工作不要以最基本的实现为目标,而要着眼于标准(包括你输出的HTML,很不标准),这样你才有竞争力,这才是我们论坛的目标和宗旨--标准! |
-- 作者:hexun831012 -- 发布时间:4/28/2009 10:45:00 PM --
直接,这个措词,哈哈哈 |
-- 作者:Qr -- 发布时间:4/28/2009 10:53:00 PM -- 所以说,学精XSL还是有相当难度的,另外还有XPath,掌握了它,写XSL就会更得心应手。 IE很“宽容”,但是这种“宽容”却非常容易偏离标准,后果是可想而知的,所以,学好用好标准,才是根本。 |
-- 作者:wuqq.xml -- 发布时间:4/28/2009 10:54:00 PM -- 谢了。 |
-- 作者:hexun831012 -- 发布时间:4/28/2009 10:57:00 PM -- 所以还是那句话,学术的时候请用标准+Firefox,工作的时候请用标准+兼容
|
-- 作者:Qr -- 发布时间:4/28/2009 10:59:00 PM --
晕,原打“耿直”,因为输入法的问题,输出“耿直接”,然后又删错了“耿”字,看来是该睡觉了。 |
-- 作者:hexun831012 -- 发布时间:4/28/2009 11:01:00 PM -- 5月12号我就出发去澳洲了,以后基本看不懂中文啦,活活 |
-- 作者:Qr -- 发布时间:4/28/2009 11:27:00 PM --
陆克文上任,澳洲人开始学习中文;你刚准备去澳洲,就忘了中文,是不是有点…… |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
99.609ms |