快速业务通道

java中通过xpath处理含有命名空间 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-25

java中通过xpath处理含有命名空间

时间:2007-05-30

声明:以下的测试是用的jdk1.4.2,xalan7.0对于如下xml文档片断: <ML:MREML xmlns:ML="MREML"><EnvelopEntity><EnvelopID>GUID2006102000002</EnvelopID><EnvelopVersion>1.0.1R</EnvelopVersion><ExchangeTime>2006-10-25 13:12:10</ExchangeTime><SendFrom><SFID>SOBEY_NEWS</SFID><SFDescription>SOBEY新闻系统</SFDescription></SendFrom><SendTo><STID>DAYANG_MAM</STID><STDescription>DAYANG媒资系统</STDescription></SendTo><Priority>2</Priority><EntityInfo><EntityID>REQUEST_ID_01</EntityID><EntityType>4</EntityType></EntityInfo><EntityInfo><EntityID>节目GUID</EntityID><EntityType>3</EntityType></EntityInfo><EntityInfo><EntityID>管理信息实体ID</EntityID><EntityType>2</EntityType></EntityInfo></EnvelopEntity></ML:MREML >对于上述含有命名空间的xml文档,如果想通过xpath查找EnvelopID的值,有两种方式:1.通过利用xpath的函数local-name()

如上述查找内容的xpath表达式可以写为://*[local-name()=''MREML'']/EnvelopEntity/EnvelopID/text()

2.通过在java程序中处理上述文档的命名空间是定义的,如果要使xpath表达式能正确地被解析需要在java程序中建立起prefix和uri二者的映射关系public static Node parseXPath(String expression, Object obj, QName qname)throws Exception {javax.xml.xpath.XPath xpath = javax.xml.xpath.XPathFactory.newInstance().newXPath();xpath.setNamespaceContext(getNamespaceContext());if (qname.equals(XPathConstants.NODE))return (Node) xpath.evaluate(expression, obj, qname);return null;}

public static NamespaceContext getNamespaceContext() throws Exception {return new NamespaceContext() {public String getNamespaceURI(String prefix) {/*// 一种方式://这里可以采用配置文件的方式,先将所需要使用的xmlNamespace配置好,//采用注册的方式供应用使用,这种方式效率应该高一些,不用每次都要从文档中提取namespace//不过没有第二种方便String uri;if (prefix.equalsIgnoreCase("ML"))uri = "MREML";else if (prefix.equalsIgnoreCase("RE"))uri = "http://herry.com.cn";else if (prefix.equalsIgnoreCase("RID"))uri = "ResourceID";else if (prefix.equalsIgnoreCase("RUI"))uri = "ResourceUniqueID";else if (prefix.equalsIgnoreCase("RMDI"))uri = "ResourceMetaDataInfo";elseuri = null;System.out.println(ParseXMLUtil.class + "::getNamespaceURI:prefix= " + prefix);return uri;*//*// 另外一种方式: 通过PrefixResolver来提取出prefix和Namespace的对应关系final PrefixResolver resolver =new PrefixResolverDefault(doc.getDocumentElement());

return resolver.getNamespaceForPrefix(prefix);

*/

// Dummy implementation - not used!public java.util.Iterator getPrefixes(String val) {return null;}

// Dummy implemenation - not used!public String getPrefix(String uri) {return null;}};}若要查找ResourceUniqueID的值,则xpath应该

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号