我只是对默认命名空间感到好奇。我有以下xml:
<root xmlns="myNamespace">
<someElement xmlns="anotherNamespace">
<data>Info</data>
</someElement>
<anotherElement>
<moreData>Info2</moreData>
</anotherElement>
</root>
我的猜测是myNamespace
是<root>
和<anotherElement>
的继承。 anotherNamespace
是<someElement>
中的默认命名空间,因此在此元素中,其子元素会覆盖另一个myNamespace
。
我知道我可以重写上面的xml代码,如:
<my:root xmlns:my="myNamespace">
<a:someElement xmlns:a="anotherNamespace">
<a:data>Info</a:data>
</a:someElement>
<my:anotherElement>
<my:moreData>Info2</my:moreData>
</my:anotherElement>
</my:root>
我认为两者都是完全有效但我在java中的一些xml bean实现有一些问题,它不接受第一个,所以我很好奇是否有一个xml规范,其中指定是否第一个aproach正确的。
答案 0 :(得分:1)
第一种方法是有效的。在 6.2命名空间默认部分的xml-names specification中,它解释了:
默认命名空间声明的范围从 开始标记的开头,它出现在结尾处 相应的结束标记,不包括任何内部默认的范围 名称空间声明。
还包括这个例子:
<!-- initially, the default namespace is "books" -->
<book xmlns='urn:loc.gov:books'
xmlns:isbn='urn:ISBN:0-395-36341-6'>
<title>Cheaper by the Dozen</title>
<isbn:number>1568491379</isbn:number>
<notes>
<!-- make HTML the default namespace for some commentary -->
<p xmlns='http://www.w3.org/1999/xhtml'>
This is a <i>funny</i> book!
</p>
</notes>
</book>