什么有名称空间与XML有关?

don*_*ile 3 xml iphone namespaces nsxmlparser

这里让我困惑的是:

NSXMLParser方法具有namespaceURI属性:

- (void)parser:(NSXMLParser *)parser 
 didEndElement:(NSString *)elementName 
  namespaceURI:(NSString *)namespaceURI 
 qualifiedName:(NSString *)qName
Run Code Online (Sandbox Code Playgroud)

从文档中我无法弄清楚它们的意思是"命名空间".有人可以用一个例子来解释XML中的命名空间是什么以及我为什么要这样做?

编辑:是的,我注意到维基百科.但它又令人困惑.将一个单独的名称空间声明放在XML文件的顶部是有意义的

xmlns:xhtml="http://www.w3.org/1999/xhtml"
Run Code Online (Sandbox Code Playgroud)

?? 再一次,这只是毫无意义.维基百科没有任何有用的例子可以获得它,为什么我真的想要名称空间,更重要的是 - 它在XML文件中看起来如何.他们说这是为了解决多个同名元素(如ID)的歧义,但没有例子说明多个命名空间如何解决这个问题.

Tom*_*lak 7

XML命名空间在其他地方的命名空间就像.

它们提供了一种独特区分同名元素或属性的方法.这是通过声明命名空间URI并可选地将前缀附加到节点名称来完成的.此前缀(可选)与名称空间声明一起定义.

<!-- node without any namespace (it's in the default namespace) -->
<node>
  <child /><!-- descendants are in the parent namespace by default -->
</node>

<!-- node with explicit default namespace -->
<node xmlns="http://some/namespace/uri/">
  <child /><!-- descendants are in the parent namespace by default -->
</node>

<!-- NS declaration with prefix (node is still in the default namespace!) -->
<node xmlns:prefix="http://some/namespace/uri/">
  <child /><!-- descendants are in the parent's namespace -->
  <prefix:child><!-- explicit namespace assignment by prefix -->
    <grandchild /><!-- prefixes don't propagate, this is in the default namespace! -->
  </prefix:child>
</node>
Run Code Online (Sandbox Code Playgroud)

命名空间是严格限定范围的.它们仅对节点及其后代可用.要在整个XML文档中使用命名空间,必须在顶级元素(文档元素)中声明它.

在您的情况下,在示例或<prefix:child />:

didEndElement = "child"
 namespaceURI = "http://some/namespace/uri/"
qualifiedName = "prefix:child"
Run Code Online (Sandbox Code Playgroud)