在学采用JDOM解析XML文档时,如何把XML文档中的内容全部解析出来,这个问题可把我难住了。不过经过多番查看JDOM API后,终于把它给搞定了。呼呼。。经过这么一弄,算是基本掌握JDOM了。
其中XML文档为:company.xml
<?xml version="1.0" encoding="UTF-8"?> <联系人列表 公司="大禹"> <联系人> <!-- 我是注释,看不见我 --> <姓名>大牛</姓名> <公司>大禹集团</公司> <电话>180888888</电话> <地址> <街道>皇后街</街道> <城市>上海</城市> <省份>上海</省份> </地址> </联系人> <联系人> <姓名>二牛</姓名> <公司>大禹集团</公司> <电话>188888888</电话> <地址> <街道>皇后大道</街道> <城市>上海</城市> <省份>上海</省份> </地址> </联系人> </联系人列表>
解析它的java代码如下:ParseTest.java
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.jdom.Attribute;
import org.jdom.Comment;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Text;
import org.jdom.input.SAXBuilder;
// 练习 解析指定的XML文档,打印到控制台上
public class ParseTest {
public static void main(String[] args) throws JDOMException, IOException {
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(new File("company.xml"));
Element root = doc.getRootElement();
parse(root);
}
private static void parse(Element root) {
String rootName = root.getName();
System.out.print("<" + rootName);
// 把当前元素里的属性先打印出来
List listAtt = root.getAttributes();
for (int i = 0; i < listAtt.size(); i++) {
Attribute att = (Attribute) listAtt.get(i);
String sname = att.getName();
String svalue = att.getValue();
System.out.print(" " + sname + "=\"" + svalue + "\"");
}
System.out.print(">");
List listContent = root.getContent();
for (int i = 0; i < listContent.size(); i++) {
Object obj = listContent.get(i);
// 利用instanceof关键字来判断获得的内容的具体类型
if (obj instanceof Text) {
Text t = (Text) obj;
System.out.print(t.getText()); // 递归出口
} else if (obj instanceof Element) {
Element e = (Element) obj;
parse(e); // 如果是Element,则递归
} else if (obj instanceof Comment) {
Comment c = (Comment) obj;
System.out.print("<!--" + c.getText() + ">");
}
}
System.out.print("</" + rootName + ">");
}
}
这里instanceof关键字,可是帮了我大忙,没有它的话,都不知道怎么去判断从getContent()方法中得来的对象。。