12.5 使用JDOM获取命名空间信息

JDOM的Element和Attribute也都提供了丰富的方法来访问其命名空间信息,这些方法如下:

alt String getName():返回该元素(或属性)的名称的本地部分(也就是英文冒号后面的部分)。

alt String getNamespacePrefix():返回该元素(或属性)的名称的命名空间前缀(也就是英文冒号前面的部分)。

alt String getNamespaceURI():返回该元素(或属性)的名称里命名空间的URI。

alt String getQualifiedName():返回该元素(或属性)的完整名称(即既包括英文冒号前面的前缀,也包括英文冒号之后的本地部分)。

alt Namespace getNamespace():获取该元素(或属性)所在命名空间的Namespace对象。

除此之外,Element还提供了getAdditionalNamespaces()方法,用于获取在元素上声明的xmlns:prefix属性(也就是获取命名空间声明)。关于这个方法说明如下:

alt List getAdditionalNamespaces():获取在该元素上附加的命名空间声明。

例如有如下元素:

alt

如果调用上面的元素的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

alt

alt

使用上面的程序读取12.3节所介绍的book.xml文档,可看到图12.4所示结果。

alt

图12.4 使用JDOM读取命名空间信息

通过上面的程序不难看出,JDOM和dom4j两套解析API在获取命名空间信息时的用法也基本相似,区别主要是如下两点:

alt JDOM的Element和Attribute没有提供一个getQName()方法,而是直接提供了一个getName()方法来获取元素和属性的本地名。

alt JDOM的Element在获取该元素上声明的附加命名空间信息时使用getAdditionalNamespaces()方法即可。

但上面这两点差异对编程的影响微乎其微,因此两个程序的编程思路和实现代码基本上没有太大的差别。