11.6 使用dom4j获取命名空间信息

dom4j的Element和Attribute接口里都提供了大量方法来获取对应的命名空间信息,这些方法如下:

alt Namespace getNamespace():返回该元素(或属性)的命名空间声明。如果该元素没有命名空间声明,则返回Namespace.NO_NAMESPACE。

alt Namespace getNamespaceForPrefix(String prefix):获取指定prefix前缀所对应的命名空间。如果该前缀没有对应的命名空间,则返回null。

alt Namespace getNamespaceForURI(String uri):获取指定URI所对应的命名空间。如果该URI没有对应的命名空间,则返回null。

alt String getNamespacePrefix():返回该元素(或属性)的命名空间前缀。如果该元素没有命名空间,则返回空字符串。

alt String getNamespaceURI():返回该元素(或属性)的命名空间的URI。如果该元素没有命名空间,则返回空字符串。

alt String getQualifiedName():返回该元素(或属性)的全限定名,即返回“命名空间前缀+英文冒号+本地标签名”。

alt List additionalNamespaces():返回该元素附加的命名空间声明。如果该元素上没有附加的命名空间声明,则返回长度为0的List集合。Attribute接口不包含该方法。

对于getNamespace()和additionalNamespaces()方法,它们都是返回指定元素的xmlns:prefix属性。每个XML元素可以有多个xmlns:prefix属性,例如有如下元素:

alt

如果调用上面的元素的getNamespace()方法,将返回xmlns:a="http://www.crazyit.org/a"属性所声明的命名空间;如果调用该元素的additionalNamespaces()方法,则返回xmlns:b="http://www.crazyit.org/b"和xmlns:c=http://www.crazyit.org/c"两个属性所声明的命名空间信息。由此不难看出,当指定元素的标签名有前缀a时,调用getNamespace()方法返回的是xmlns:a属性所对应的命名空间声明,也就是该元素本身所在的命名空间声明。

下面的Java程序示范了如何解析XML文档中所包含的命名空间信息:

程序清单:codes\11\11.6\src\lee\Dom4jNSRead.java

alt

alt

运行上面的程序可看到图11.5所示结果。

alt

图11.5 获取XML文档的命名空间信息

从图11.5可以看出,通过调用dom4j的Element所提供的一系列方法,我们完全可以访问到该XML文档每个元素和每个属性所在命名空间的信息。