
import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;
import org.jdom.xpath.*;
import org.jdom.Text;
/*
phone.xml
<?xml version="1.0" encoding="UTF-8"?>
<friends comment="Friends List">
<friend number="1">
<name>張三</name>
<sex value="male" />
<phone type="home">02-55556666</phone>
<phone type="mobile">0931555645</phone>
</friend>
<friend number="2">
<name>李四</name>
<sex value="male" />
<phone type="home">02-36541234</phone>
<phone type="mobile">0932333666</phone>
</friend>
<friend number="3">
<name>王五</name>
<sex value="female" />
<phone type="home">02-80213698</phone>
<phone type="mobile">0939222333</phone>
</friend>
</friends>
*/
public class XPathReader {
public static void main(String[] args) throws IOException {
PrintStream out = System.out;
String name = null;
String sex = null;
String phone_home = null;
String phone_mobile = null;
String s = null;
try {
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(new File("phone.xml"));
Element root = doc.getRootElement();
List list = XPath.selectNodes(root,"/friends/friend");
Iterator i = list.iterator();
int j = 1;
while (i.hasNext()) {
Element element = (Element) i.next();
String number = element.getAttributeValue("number");
name = ( (Text) XPath.selectSingleNode(element,"//friend[@number='" + number + "']/name/text()")).getTextNormalize();
sex = ( (Element) XPath.selectSingleNode(element,"//friend[@number='" + number + "']/sex")).getAttributeValue("value");
phone_home =( (Text) XPath.selectSingleNode(element,"//friend[@number='" + number + "']/phone[@type='home']/text()")).getText();
phone_mobile =( (Text) XPath.selectSingleNode(element,"//friend[@number='" + number + "']/phone[@type='mobile']/text()")).getText();
s = "name "+name+",sex "+sex+",phone_home "+phone_home+",phone_mobile "+phone_mobile;
out.println(s);
}
} catch (JDOMException e) {
e.printStackTrace();
}
}
}
/* result
name 張三,sex male,phone_home 02-55556666,phone_mobile 0931555645
name 李四,sex male,phone_home 02-36541234,phone_mobile 0932333666
name 王五,sex female,phone_home 02-80213698,phone_mobile 0939222333
*/
沒有留言:
張貼留言