xpath无效问题分析

1.项目使用的webservice框架为Axis1.4。开发功能的过程中需要使用xpath解析接口返回的xml.

无奈怎么写path 都不起作用,于是为了跟源码建了个工程,跳过得项目里封装的api.

1. maven pom.xml 需要引入commons-discovery,否则调用接口会报错

<dependency>
			<groupId>javax.xml.rpc</groupId>
			<artifactId>javax.xml.rpc-api</artifactId>
			<version>1.1.1</version>
		</dependency>

		<dependency>
			<groupId>xerces</groupId>
			<artifactId>xercesImpl</artifactId>
			<version>2.11.0</version>
		</dependency>

		<dependency>
			<groupId>org.apache.axis</groupId>
			<artifactId>axis</artifactId>
			<version>1.4</version>
		</dependency>
		<dependency>
			<groupId>commons-discovery</groupId>
			<artifactId>commons-discovery</artifactId>
			<version>0.2</version>
		</dependency>

2.通过Service对象生成调用对象 Call在调用接口,定位到代码

private static DocumentBuilderFactory getDOMFactory() {
        DocumentBuilderFactory dbf;
        try {
            dbf = DocumentBuilderFactory.newInstance();
            dbf.setNamespaceAware(true);
        }
        catch( Exception e ) {
            log.error(Messages.getMessage("exception00"), e );
            dbf = null;
        }
        return( dbf );
    }

这个返回的dbf是设置了namespaceAware的,难怪之前怎么写都没有效果,原来是要对xpath设置namespace

3.修改xpath

设置 javax.xml.xpath.XPath xpath 对象增加namespace前缀 "ns",url

设置 xpath路径加上namespace前缀。

解析生效

猜你喜欢

转载自solong1980.iteye.com/blog/2395512