XML命名空间主要完成两件事情. 首先, 与C#的命名空间一样, 它们可以帮助避免命名冲突. 当你要合并来自两个不同XML文件的时候这可能会成为一个问题. 其次, 命名空间赋予了名称一个绝对的意义. 例如, 名称”nil” 可以代表任何意思, 然而, 如果和http://www.w3.org/2001/XMLSchema-instance命名空间一起, “nil”表示类似于C#当中null的意思, 并且有特定的规则指示其如何被应用.
XML的命名空间是使用xmlns属性来定义的:
1: <customer xmlns="OReilly.Nutshell.CSharp"/>
xmlns是一个特殊的保留属性. 当我们这样使用时, 它主要执行两个功能:
它为有疑问的元素指定了一个命名空间
它为所有后代元素指定了一个默认的命名空间
我们也可以使用一个前缀(prefix)指定命名空间——这可以用来避免重复.主要有两个步骤——定义前缀和使用前缀. 我们也可以类似下面的做法将它们同时定义:
1: <nut:customer xmlns:nut="OReilly.Nutshell.CSharp"/>
两件不同的事情在这里产生. 在右边, xmlns:nut=”…”定义了一个前缀叫做nut并使其对于元素本身以及它所有的后代元素都是可用的. 在左边, nut:customer应用了最新定义的前缀到customer元素上.
一个被定义了前缀的元素不会为它的后代元素定义默认的命名空间. 在下面的XML片段中, firstname包含一个空的命名空间:
1: <nut:customer nut:xmlns="OReilly.Nutshell.CSharp">
2: <firstname>Joe</firstname>
3: </customer>
为了将OReilly.NutShell.CSharp的前缀给予firstname, 我们必须使用下面的做法:
1: <customer
2: xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
3: xmlns:z="http://schemas.microsoft.com/Serialization/">
4: ...
5: </customer>
我们也可以将命名空间赋值到属性上, 不同之处在于它总是要求一个前缀. 例如:
1: <customer
2: xmlns:nut="OReilly.Nutshell.CSharp" nut:id="123" />
另一个不同之处在于一个未经修饰的属性总是包含一个空的命名空间: 其永远不会从父元素继承一个默认的命名空间.
XML的命名空间是使用xmlns属性来定义的:
1: <customer xmlns="OReilly.Nutshell.CSharp"/>
xmlns是一个特殊的保留属性. 当我们这样使用时, 它主要执行两个功能:
它为有疑问的元素指定了一个命名空间
它为所有后代元素指定了一个默认的命名空间
我们也可以使用一个前缀(prefix)指定命名空间——这可以用来避免重复.主要有两个步骤——定义前缀和使用前缀. 我们也可以类似下面的做法将它们同时定义:
1: <nut:customer xmlns:nut="OReilly.Nutshell.CSharp"/>
两件不同的事情在这里产生. 在右边, xmlns:nut=”…”定义了一个前缀叫做nut并使其对于元素本身以及它所有的后代元素都是可用的. 在左边, nut:customer应用了最新定义的前缀到customer元素上.
一个被定义了前缀的元素不会为它的后代元素定义默认的命名空间. 在下面的XML片段中, firstname包含一个空的命名空间:
1: <nut:customer nut:xmlns="OReilly.Nutshell.CSharp">
2: <firstname>Joe</firstname>
3: </customer>
为了将OReilly.NutShell.CSharp的前缀给予firstname, 我们必须使用下面的做法:
1: <customer
2: xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
3: xmlns:z="http://schemas.microsoft.com/Serialization/">
4: ...
5: </customer>
我们也可以将命名空间赋值到属性上, 不同之处在于它总是要求一个前缀. 例如:
1: <customer
2: xmlns:nut="OReilly.Nutshell.CSharp" nut:id="123" />
另一个不同之处在于一个未经修饰的属性总是包含一个空的命名空间: 其永远不会从父元素继承一个默认的命名空间.