使用dom4j的xpath读取XML文件

2014-11-24 11:36:05 · 作者: · 浏览: 3

在java中,使用dom4j读一个XML文件,该文件的格式很简单,如下:
< xml version="1.0" >


BJS
1
北京
Beijing
1
1
NAY,PEK


SHA
2
上海
Shanghai
1
2
PVG,SHA


TSN
3
天津
Tianjin
1
3
TSN

读这个文件方法如下:

public static void main(String args[]) throws Exception {

SAXReader reader = new SAXReader();

String filePath = "src/resources/国内城市.xml";

File file = new File(filePath);

ArrayList cityList = new ArrayList();


if (file.exists()) {
Document document = reader.read(file);// 读取XML文件
Element root = document.getRootElement();// 得到根节点

String xPathString = "//CityDetails/CityDetail";
List list = root.selectNodes(xPathString);
Element cityDetail, city, cityName, province, country;
Node cityNode, cityNameNode;
int i = 0;

for (Object obj : list) {

cityDetail = (Element) obj;

//方法一,使用 elementText可以显示出子元素的text。
System.out.println(cityDetail.elementText("City")+":"+cityDetail.elementText("CityName"));

//方法二,继续使用xpath,则只能显示第一个节点的元素,循环下面的都没变化,还是第一个节点。
xPathString = "//CityDetail/City";
cityNode = cityDetail.selectSingleNode(xPathString);

city = (Element) cityNode;
System.out.println(city.asXML());
// System.out.println(city.getText());

xPathString = "//CityDetail/CityName";
cityNameNode = cityDetail.selectSingleNode(xPathString);
cityName = (Element) cityNameNode;
System.out.println(cityName.asXML());
// System.out.println(cityName.getText());

i++;
if (i > 2)
break;

}

} else {
System.out.println("file not exists");

}


}

显示的结果是这样:

1:北京
1
北京
2:上海
1
北京
3:天津
1
北京

问题在于,在xpath读取到一个节点后,继续使用xpath读取子节点时,出现问题。所有循环读取的结果都是第一个子节点的值。如本测试中的“1北京/CityName>”。