日期:2014-05-19  浏览次数:20634 次

xml命名空间问题()
<x xmlns="http://www.aaa.com" xmlns:n1="http://www.bbb.com">
<good a="1" n1:a="2" />
</x>
按理说,x和good属于默认名称空间,a="2"属于n1名称空间,a="1"不属于任何名称空间。
那如果这样的话,spring配置文件:
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd>
   
  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
  </bean>

</beans>


bean标签的id和class属性也就不属于 xmlns="http://www.springframework.org/schema/beans"这个名称空间内,
求大神解答!!!

------解决方案--------------------
x和good属于默认名称空间,a="2"属于n1名称空间,a="1"不属于任何名称空间
上面这句话是对的,两个老师讲的都没有问题。也正因为如此,所以在good下,有两个a属性才不会产生冲突。

书上是这么定义的:
如果属性名称中有一个前缀部分,该属性将被限定在该前缀所指定的名称空间中。
如果属性名称中没有前缀部分,那么该属性就不属于任务名称空间。
属性不受默认名称空间的影响,即使在一个没有前缀部分的属性出现之前已经指定默认名称空间,该属性也不属于默认名称空间。

书上还有一处是这么说的:
在XML实例文档中通常只需要将元素限定于该模式文档的名称空间中,而不需要将元素的属性限定于名称空间中。在XML实例文档中不用为它们(属性)指定名称空间,处理程序必须能对此做出正确的解释。

楼主把这两段话综合起来理解下。意思大概是,虽然没有指定命名空间的属性不属于任务的命名空间,但XML解析程序要做好正确解析的准备。言外之意,虽然不属于哪个命令空间,但该属性还是要能被正确解析出来,所以还是应该在默认命名空间里定义好。
------解决方案--------------------
名称空间的出现 是为了解决有限的名称资源可能造成的冲突而设的吧

<x xmlns="http://www.aaa.com" xmlns:n1="http://www.bbb.com">
<good a="1" n1:a="2" />
</x>

这些都是人为定义的,像这样一段xml,名称空间是如何表达的?

1. 元素和属性都能有名称空间吗?

2. 像这个属性 xmlns="http://www.aaa.com", 因为它本身的含义特殊,xml名称空间,它的属性值又能代表什么?

带着这些问题,可以先看下这里:
http://www.w3school.com.cn/xml/xml_namespaces.asp