2009-12-17 80 views
4

给出的以下XML标记:为什么我必须将空名称空间传递给XPathNavigator.GetAttribute?

<root xmlns="Demo"> 
    <child name="foo"/> 
</root> 

和位于<child>元件上的XPathNavigator

string withNs = navigator.GetAttribute("name", navigator.NamespaceURI); 
string withoutNs = navigator.GetAttribute("name", ""); 

产生奇怪的结果:withNs是空的,包含withoutNsfoo

这是为什么?我原以为这是另一回合,因为name属性必须位于Demo名称空间中,如child元素。

MSDN文档没有提及传递namespaceURI=""的神奇含义,所以我假设你必须传递该属性的真实名称空间URI。

回答

5

< <由于name属性必须位于Demo命名空间中,就像child元素一样。 > >

根据w3c规范,属性不会继承它所属的元素的名称空间,这就是为什么您得到了那些结果,这是正确的。

+1

谢谢!傻我。我想在发布之前验证我对名称空间继承的假设,但是放弃了太简明的XML规范:-(无论如何,我刚刚发现了一个很好的解释:http://www.xmlplease.com/attributexmlns – 2009-12-18 08:47:01

相关问题