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)的歧义,但没有例子说明多个命名空间如何解决这个问题.
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)