xml命名空间

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" />
另一个不同之处在于一个未经修饰的属性总是包含一个空的命名空间: 其永远不会从父元素继承一个默认的命名空间.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值