Java API编写自己的NamespaceContext

2016-02-20 01:01 11 1 收藏

下面图老师小编要跟大家分享Java API编写自己的NamespaceContext,简单的过程中其实暗藏玄机,还是要细心学习,喜欢还请记得收藏哦!

【 tulaoshi.com - Web开发 】

如果想要在 XPath 表达式中使用名称空间,必须提供对此名称空间 URI 所用前缀的链接。本文介绍了向名称空间映射提供前缀的三种不同方式。本文亦包含了示例代码以方便您编写自己的 NamespaceContext。

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

前提条件和示例

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

本文所有的示例均使用如下这个XML文件:

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

清单1. 示例XML

?xml version="1.0" encoding="UTF-8"?books:booklist  xmlns:books="http://univNaSpResolver/booklist"  xmlns="http://univNaSpResolver/book"  xmlns:fiction="http://univNaSpResolver/fictionbook"  science:book xmlns:science="http://univNaSpResolver/sciencebook"titleLearning XPath/titleauthorMichael Schmidt/author  /science:book  fiction:booktitleFaust I/titleauthorJohann Wolfgang von Goethe/author  /fiction:book  fiction:booktitleFaust II/titleauthorJohann Wolfgang von Goethe/author  /fiction:book/books:booklist

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

这个 XML 示例包含三个在根元素内声明的名称空间,一个在此结构的更深层元素上声明的名称空间。您将可以看到这种设置所带来的差异。

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

这个 XML 示例的第二个有趣之处在于元素 booklist 具有三个子元素,均名为 book。但是第一个子元素具有名称空间 science,而其他子元素则具有名称空间 fiction。这意味着这些元素完全有别于 XPath。在接下来的这些例子中,您将可以看到这种特性产生的结果。

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

示例源代码中有一个需要注意之处:此代码没有针对维护进行优化,只针对可读性进行了优化。这意味着它将具有某些冗余。输出通过 System.out.println() 以最为简单的方式生成。在本文中有关输出的代码行均缩写为 ...。

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

理论背景

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

名称空间究竟有何意义?为何要如此关注它呢?名称空间是元素或属性的标识符的一部分。元素或属性可以具有相同的本地名称,但是必须使用不同的名称空间。它们完全不同。请参考上述示例(science:book 和 fiction:book)。若要综合来自不同资源的 XML 文件,就需要使用名称空间来解决命名冲突。以一个 XSLT 文件为例。它包含 XSLT 名称空间的元素、来自您自己名称空间的元素以及(通常)XHTML 名称空间的元素。使用名称空间,就可以避免具有相同本地名称的元素所带来的不确定性。

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

名称空间由 URI(在本例中为 http://univNaSpResolver/booklist)定义。为了避免使用这个长字符串,可以定义一个与此 URI 相关联的前缀(在本例中为 books)。请记住此前缀类似于一个变量:其名称并不重要。如果两个前缀引用相同的 URI,那么被加上前缀的元素的名称空间将是相同的(请参见 清单 5 中的示例 1)。

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

XPath 表达式使用前缀(比如 books:booklist/science:book)并且您必须提供与每个前缀相关联的 URI。这时,就需要使用 NamespaceContext。它恰好能够实现此目的。

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

本文给出了提供前缀和 URI 之间的映射的不同方式。

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

在此 XML 文件中,映射由类似 xmlns:books="http://univNaSpResolver/booklist" 这样的 xmlns 属性或 xmlns="http://univNaSpResolver/book"(默认名称空间)提供。

来源:http://www.tulaoshi.com/n/20160220/1633048.html

延伸阅读
标签: Web开发
上次我说了用ASP,PHP,C#分别实现Google的Translate开发一个API ( Tags:Google Translate API ) ,由于很多程序代码由JAVA实现(JSP),我还是利用一点时间做了一个java版本的,本人在JAVA方面还是入门的程度,期间,查了一些资料,虽然程序比较短,但是还是比较淘气的。   和上一话所说的利用JAVA获取URL的内容,这篇的技术实现获取,...
本文对Java规则引擎与其API(JSR-94)及相关实现做了较具体的介绍,对其体系结构和API应用有较详尽的描述,并指出Java规则引擎,规则语言,JSR-94的相互关系,以及JSR-94的不足之处和展望 本文对Java规则引擎与其API(JSR-94)及相关实现做了较具体的介绍,对其体系结构和API应用有较详尽的描述,并指出Java规则引擎,规则语言,JSR-94...
     在Servlet之前Java服务器端编程使用C或Perl编写复杂的CGI来实现来完成,Java Servlet API的出现极大地简化了Java在服务器端编程的复杂性同时能最大限度地发挥Java的的整体优势。 在这个专题中我们由浅入深地向大家介绍Java Servlet的基本特征、开发环境的配置以及Servlet的一些主要API类。 Servlet慨述 Ser...
除了基于屏幕的组件外,你还应该掌握使用表单把多个组件组织到一个屏幕上去。这一部分将讨论Form类和可以放置到表单上去的组件。 1. Form 一个表单对象是一个screen,它可以包含任意的项,包括只读的和可编辑的文本框,图像,日期域,gauge以及选项组组件。前面已提到,任何Item类的子类都可以放置到表单对象上去。Form类的构造器如下: ...
  看过一个关于screen的例子后,你应该会问起:你是如何来组织这些screen的?在它们之间是如何导航的?你是如何管理显示及输入设备的?回答是,所有的功能皆由Display类来实现,它提供了相应的方法用于把对象显示在设备的屏幕上以及用于检索设备的属性等。 1. Display 一个指向设备的display的引用可以通过提供一个MIDlet引用给静态方...

经验教程

977

收藏

72
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部