11.6 使用dom4j获取命名空间信息
dom4j的Element和Attribute接口里都提供了大量方法来获取对应的命名空间信息,这些方法如下:
Namespace getNamespace():返回该元素(或属性)的命名空间声明。如果该元素没有命名空间声明,则返回Namespace.NO_NAMESPACE。
Namespace getNamespaceForPrefix(String prefix):获取指定prefix前缀所对应的命名空间。如果该前缀没有对应的命名空间,则返回null。
Namespace getNamespaceForURI(String uri):获取指定URI所对应的命名空间。如果该URI没有对应的命名空间,则返回null。
String getNamespacePrefix():返回该元素(或属性)的命名空间前缀。如果该元素没有命名空间,则返回空字符串。
String getNamespaceURI():返回该元素(或属性)的命名空间的URI。如果该元素没有命名空间,则返回空字符串。
String getQualifiedName():返回该元素(或属性)的全限定名,即返回“命名空间前缀+英文冒号+本地标签名”。
List additionalNamespaces():返回该元素附加的命名空间声明。如果该元素上没有附加的命名空间声明,则返回长度为0的List集合。Attribute接口不包含该方法。
对于getNamespace()和additionalNamespaces()方法,它们都是返回指定元素的xmlns:prefix属性。每个XML元素可以有多个xmlns:prefix属性,例如有如下元素:
如果调用上面的元素的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
运行上面的程序可看到图11.5所示结果。
图11.5 获取XML文档的命名空间信息
从图11.5可以看出,通过调用dom4j的Element所提供的一系列方法,我们完全可以访问到该XML文档每个元素和每个属性所在命名空间的信息。