- 1、本文档共18页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用Java解析名称空间的方法
使用Java解析名称空间的方法
?2009-06-30 13:54 ?佚名 ?赛迪网 ?我要评论() 本文介绍了Java中向名称空间映射提供前缀的三种不同方式。本文亦包含了示例代码以方便您编写自己的 NamespaceContext。
如果想要在 XPath 表达式中使用名称空间,必须提供对此名称空间 URI 所用前缀的链接。
前提条件和示例
本文所有的示例均使用如下这个XML文件:
清单1. 示例XML
这个 XML 示例包含三个在根元素内声明的名称空间,一个在此结构的更深层元素上声明的名称空间。您将可以看到这种设置所带来的差异。
这个 XML 示例的第二个有趣之处在于元素 booklist 具有三个子元素,均名为 book。但是第一个子元素具有名称空间 science,而其他子元素则具有名称空间 fiction。这意味着这些元素完全有别于 XPath。在接下来的这些例子中,您将可以看到这种特性产生的结果。
示例源代码中有一个需要注意之处:此代码没有针对维护进行优化,只针对可读性进行了优化。这意味着它将具有某些冗余。输出通过 System.out.println() 以最为简单的方式生成。在本文中有关输出的代码行均缩写为 “...”。
理论背景
名称空间究竟有何意义?为何要如此关注它呢?名称空间是元素或属性的标识符的一部分。元素或属性可以具有相同的本地名称,但是必须使用不同的名称空间。它们完全不同。请参考上述示例(science:book 和 fiction:book)。若要综合来自不同资源的 XML 文件,就需要使用名称空间来解决命名冲突。以一个 XSLT 文件为例。它包含 XSLT 名称空间的元素、来自您自己名称空间的元素以及(通常)XHTML 名称空间的元素。使用名称空间,就可以避免具有相同本地名称的元素所带来的不确定性。
名称空间由 URI(在本例中为 http://univNaSpResolver/booklist)定义。为了避免使用这个长字符串,可以定义一个与此 URI 相关联的前缀(在本例中为 books)。请记住此前缀类似于一个变量:其名称并不重要。如果两个前缀引用相同的 URI,那么被加上前缀的元素的名称空间将是相同的(请参见 清单 5 中的示例 1)。
XPath 表达式使用前缀(比如 books:booklist/science:book)并且您必须提供与每个前缀相关联的 URI。这时,就需要使用 NamespaceContext。它恰好能够实现此目的。
本文给出了提供前缀和 URI 之间的映射的不同方式。
在此 XML 文件中,映射由类似 xmlns:books=http://univNaSpResolver/booklist 这样的 xmlns 属性或 xmlns=http://univNaSpResolver/book(默认名称空间)提供。
提供名称空间解析的必要性
如果 XML 使用了名称空间,若不提供 NamespaceContext,那么 XPath 表达式将会失效。清单 2 中的示例 0 充分展示了这一点。其中的 XPath 对象在所加载的 XML 文档之上构建和求值。首先,尝试不用任何名称空间前缀(result1)编写此表达式。之后,再用名称空间前缀(result2)编写此表达式。
清单 2. 无名称空间解析的示例 0
private static void example0(Document example)
throws XPathExpressionException, TransformerException {
sysout(\n*** Zero example - no namespaces provided ***);
XPath xPath = XPathFactory.newInstance().newXPath();
...
NodeList result1 = (NodeList) xPath.evaluate(booklist/book, example,
XPathConstants.NODESET);
...
NodeList result2 = (NodeList) xPath.evaluate(
books:booklist/science:book, example, XPathConstants.NODESET);
...
}
输出如下所示。
清单 3. 示例 0 的输出
*** Zero example - no namespaces provi
您可能关注的文档
最近下载
- 演出合同范本13篇.pdf VIP
- 佳能EOS6D使用说明.docx
- 世茂集团工程招投标技术标管理制度.docx
- 长安铃木吉姆尼电路图.pdf
- 美国材料与试验协会A480-A480M-2016_平扎不锈钢及耐热钢中板、薄板及钢带的一般要求[1](中文版).doc
- 地铁保洁服务投标方案(技术标).docx
- 2022年湖南衡阳市衡东县人大代表服务中心选调考试备考试题及答案解析.docx VIP
- 3完整版本.1固相反应.ppt VIP
- 2025高考英语时事热点阅读专练10 自然和宇宙探索(学生版+解析版).docx
- 2023年北京中考数学重难题型01新定义创新型综合压轴问题(13-22年最后一题+真题10道模拟30道)含详解.pdf VIP
文档评论(0)