XSLT与XML转换出错:带命名空间的XSLT与XML转换问题

9,694次阅读
4 条评论

共计 960 个字符,预计需要花费 3 分钟才能阅读完成。

你可能会发现,普通的XML与XSLT转换时没有问题,但是当XML文档根标签添加指定命名空间后,即会出现XSLT转换无法解析的情况。举例说明如下。
如XML文档格式如下:




……

而XSLT文档格式如下:












]>
xmlns=”http://www.w3school.com.cn”
>

references“>
……


这种情况下是可以正常转换的。

但是当XML文档格式变为如下:




……

此时就无法正常转换了。

这是什么原因呢?
显然这应该是命名空间的问题。当不明确指定XML文档的命名空间时,其使用的为默认命名空间,在XSLT文档中引用的XML文档中的元素标签(即类似中的author或xpath路径设置等的引用)可以被正确区分识别。
当明确指定XML文档的命名空间后,XSLT中仍然如此直接引用的元素标签就不会被识别为属于指定的命名空间了,因此引用元素无法被正确识别匹配,从而导致转换出错。
那么如何解决带命名空间的XML与XSLT转换呢?方法就是在XSLT中声明同样的命名空间并设置命名空间前缀,然后在引用XML文档的元素进行输出时,所有元素前面也加上设置的命名空间前缀,如此即可正确被识别转换了。即类似如下:
XSLT文档格式如下,注意红色标记部分与前面类似代码的区别:












]>
xmlns:sc=”http://www.w3school.com.cn”
>

sc:references“>
……


关于该问题可参考如下几个示例

(1) 不带命名空间的XML文档<正确转换>:
http://lzw.me/pages/referencesquery/xslt_referencesFormat.xml
对应XSLT文件:
http://lzw.me/pages/referencesquery/referencesFormat.xslt

(2) 带命名空间的XML文档<不能正确转换>:
http://lzw.me/pages/referencesquery/xslt_referencesFormat_bad.xml
对应XSLT文件与上面(1)相同

(3) 带命名空间的XML文档<正确转换,内容与(2)相同>
http://lzw.me/pages/referencesquery/xslt_referencesFormat_right.xml
对应XSLT文件:
http://lzw.me/pages/referencesquery/referencesFormat_right.xslt

(4) 一个关于XML、XSLT以及Schema验证的参考文献格式查询与输出综合例子:
http://lzw.me/pages/referencesquery/

正文完
 0
任侠
版权声明:本站原创文章,由 任侠 于2011-06-30发表,共计960字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(4 条评论)
验证码
被淹死的囧囧
2012-01-06 23:29:12 回复

多亏了这篇文章,问题解决了。THS

     中国江苏省常州市电信
SOHO一族 评论达人 LV.1
2011-07-03 22:54:43 回复

很复杂啊

     中国安徽省淮南市电信
美女图片 评论达人 LV.2
2011-07-01 23:41:10 回复

又是天文代码,呵呵!继续路过······

     中国广东省梅州市电信
化妆 评论达人 LV.1
2011-07-01 06:11:52 回复

轻轻的飘过,只留下一个脚印

欢迎来我的博客www.wxhzs.com回访,给点宝贵意见

     中国江苏省无锡市电信