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

你可能会发现,普通的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)
  1. 被淹死的囧囧说道:

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

  2. 美女图片说道:

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

  3. 化妆说道:

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

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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code