??????? 在学采用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()方法中得来的对象。。