通过Xpath查询xml返回null,xmlns问题

还是太年轻啊,遇到坑就记录一下,免得再掉坑里

下面是剧本

1、建立项目之后,在com.dom4j包下创建users.xml,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<root>
	<user id="u01" username="jack" password="123456" />
	<user id="u02" username="marry" password="654321" />
</root>

2、有了xml文件之后,那么我们去程序里读出来并且使用xpath进行xml的解析吧

在com.dom4j包下创建Dom4jXpath.java,内容如下:

package com.dom4j;

import java.io.File;
import java.util.Scanner;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class Dom4jXpath {
	public static void main(String[] args) throws Exception {
		//解析XML文件,并查找指定的元素
		SAXReader saxReader = new SAXReader();
		Document document = saxReader.read(new File("src/com/dom4j/users.xml"));
		String xpath = "//user";
		Element element = (Element) document.selectSingleNode(xpath);
		System.out.println(element);
	}
}


到这里剧本就该结束了,在console里面输入了如下内容

org.dom4j.tree.DefaultElement@4b187f5b [Element: <user attributes: [org.dom4j.tree.DefaultAttribute@454e3bb0 [Attribute: name id value "u01"], org.dom4j.tree.DefaultAttribute@1330c35c [Attribute: name username value "jack"], org.dom4j.tree.DefaultAttribute@6669d6db [Attribute: name password value "123456"]]/>]


3、看完剧本,现在开始进入实际项目了,由于在内网上,xml最不用原始的了

进入正题

在项目中,xml类似于下面这种

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="www.baidu.com">
	<user id="u01" username="jack" password="123456" />
	<user id="u02" username="marry" password="654321" />
</root>

菜鸟眼拙,刚开始完全没注意到根节点上这个xmlns(xml命名空间),使用相同的语句//user去获取信息,结果返回的是null,瞬间就炸了,这不就是没解析到吗?然后就跑去又看xpath语法,反复看了好几次。还是没能找到问题所在的地方。

后来一行行来试吧。发现是这个xmlns的问题。虽然不知道为什么,但是xmlns改为其他字符串,比如 snlmx就ok了。也是没有爱啊。



你可能感兴趣的:(通过Xpath查询xml返回null,xmlns问题)