12.5 使用JDOM获取命名空间信息
JDOM的Element和Attribute也都提供了丰富的方法来访问其命名空间信息,这些方法如下:
String getName():返回该元素(或属性)的名称的本地部分(也就是英文冒号后面的部分)。
String getNamespacePrefix():返回该元素(或属性)的名称的命名空间前缀(也就是英文冒号前面的部分)。
String getNamespaceURI():返回该元素(或属性)的名称里命名空间的URI。
String getQualifiedName():返回该元素(或属性)的完整名称(即既包括英文冒号前面的前缀,也包括英文冒号之后的本地部分)。
Namespace getNamespace():获取该元素(或属性)所在命名空间的Namespace对象。
除此之外,Element还提供了getAdditionalNamespaces()方法,用于获取在元素上声明的xmlns:prefix属性(也就是获取命名空间声明)。关于这个方法说明如下:
List getAdditionalNamespaces():获取在该元素上附加的命名空间声明。
例如有如下元素:
如果调用上面的元素的getNamespace()方法,将返回xmlns:a="http://www.crazyit.org/a"属性所声明的命名空间;如果调用该元素的getAdditionalNamespaces()方法,则返回xmlns:b="http://www.crazyit.org/b"和xmlns:c=http://www.crazyit.org/c"两个属性所声明的命名空间的集合。由此不难看出,当指定元素的标签名有前缀a时,调用getNamespace()方法返回的是xmlns:a属性所对应的命名空间声明,也就是该元素本身所在的命名空间声明。
下面的Java程序示范了如何解析XML文档中所包含的命名空间信息:
程序清单:codes\12\12.6\src\lee\JdomNSRead.java
使用上面的程序读取12.3节所介绍的book.xml文档,可看到图12.4所示结果。
图12.4 使用JDOM读取命名空间信息
通过上面的程序不难看出,JDOM和dom4j两套解析API在获取命名空间信息时的用法也基本相似,区别主要是如下两点:
JDOM的Element和Attribute没有提供一个getQName()方法,而是直接提供了一个getName()方法来获取元素和属性的本地名。
JDOM的Element在获取该元素上声明的附加命名空间信息时使用getAdditionalNamespaces()方法即可。
但上面这两点差异对编程的影响微乎其微,因此两个程序的编程思路和实现代码基本上没有太大的差别。