这三者都有一个共同的作用,就是用于区别同名的元素。在XML中,可能一个XML文件会同时被多个人使用并写入元素,有可能不同的人写入元素的时候使用了相同的元素名,这样就会引起问题。所以,使用命名空间的话,给这3个人规定要使用不同规定命名空间,这样就不会出现同名元素引发的问题了。Class也是,引用命名空间就是为了使同名的Class在使用的时候不会引起冲突。在Web.config文件中,也是这个道理。在用到很多第三方的插件的时候,都需要在Web.config中做一些配置,如果直接往文件里写入内容的话,不同的插件可能使用了相同的元素名,比如说,都有一个元素叫E. 为了避免这个问题,所以第三方的插件在Web.config中一般都是组织一个section,然后在section中写入需要的元素。
XML中的命名空间一般是一个URI,http://www.w3.org/1999/XSL/Format,这仅仅是一个字符串,并不是指向一个实际存在的网址或者文件。或许你在浏览器中输入这个字符串也会有一个网页出现,但不是说,哪个字符串都对应一个网页。或许可以这样说,命名空间一样可以用httq://来开头,但是习惯上用http,所以大家就都用http了。命名空间通常是在xml文件的开头声明一下,然后用一个简单的字符串来代表这个长字符串,我们把这个简单的字符串叫做prefix,前缀。
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> </xsl:stylesheet>在这之后,就可以用xsl和fo来代表这两个命名空间。一旦prefix声明后,就可以在任何元素的名称前使用来表面这个元素是属于这个命名空间。比如<xsl:template match="/">, xsl:template实际上就是http://www.w3.org/1999/XSL/Transform:template,前缀只是起到连接命名空间和元素名称的作用,在组成的元素名称中不占任何部分。
关于默认命名空间的问题。如果父元素指定了一个命名空间,而子元素没有命名空间,那么这个子元素的默认命名空间就和父元素一样。如果子元素有命名空间,那么其命名空间就是自己指定的这个命名空间,而不继承父元素的。命名空间的使用是分个人喜好的,有时候防止元素重名必须使用,但是有时候这个文件就你一个人操作,你对元素命名有很强的控制性,这时候不写也是可以的。
原文链接:https://www.f2er.com/xml/299568.html