在做Android相关的开发,针对xml 操作,希望用xpath来查找xml节点。
使用的包包括:
dom4j-1.6.1.jar
fastjson-1.1.24.jar
jaxen-1.1-beta-6.jar
jaxen-1.1-beta-6.jar
代码中node1 可以获得得到Root节点。
但是node2 就为null。
并且node3的时候 也为null。 请各位大神,指导指导。
在C#中,我用 该xpath,测试,能够去得到node节点,证明路径是正确的。
我快崩溃了。。一个多小时了。
public class Operation_XMl {
private Document doc;
public Operation_XMl(Context context, int nodeId) {
SAXReader reader = new SAXReader();
try {
this.doc = reader.read(context.getAssets().open("PostXML.xml"));
this.SetSingleBody(nodeId);
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void SetSingleBody(int nodeId) {
Node node1= this.doc.selectSingleNode("/Root");
Node node2= this.doc.selectSingleNode("/Root/PostNode[@id='1']");
Node node3= node1.selectSingleNode("PostNode");
}
}
xml结构如下
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<PostNode id="1" description="查询签到" nextstep="0" dedelay="3000">
</PostNode>
</Root>
------解决思路----------------------
代码如下,应该非常简单才对,注意一下你的attr由中文,需要解码:
import java.io.File;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class Dom4jTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
SAXReader reader = new SAXReader();
reader.setEncoding("utf-8");
Document document = null;
try {
System.out.println(System.getProperty("user.dir"));
document = reader.read(new File("src/test/PostXML.xml"));
} catch (Exception ex) {
ex.printStackTrace();
}
Node node1 = document.selectSingleNode("Root");
System.out.println(node1.getName());
Node node2 = node1.selectSingleNode("PostNode");
System.out.println(node2.getName());
System.out.println(((Element)node2).attributeValue("dedelay"));
System.out.println(((Element)node2).attributeValue("description"));
}
}
结果如下: