|
声明:以下的测试是用的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(XPat [1] [2] [3] [4] [5] 下一页
|