还是太年轻啊,遇到坑就记录一下,免得再掉坑里
下面是剧本
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);
}
}
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了。也是没有爱啊。